木灵鱼儿

木灵鱼儿

阅读:177

最后更新:2023/01/09/ 16:29:11

卷轴地图

雷电这种飞机游戏,他的地图是一个无限滚动的背景,最直白的一个办法就是做两张图,然后y轴移动,当一张图已经移动到最底的时候,也就是这个图的高度已经到0的坐标位置时,将其移动到顶部,以此类推,这样通过两张图来回位置控制,实现一个无限滚动的地图。

理论上最简单,但是代码上会复杂一些。

本次使用的方法是通过3d的四边形挂上一个材质,控制材质的位移实现,这样只需要一个资源对象就实现了卷轴地图。

这种方式可以理解为前端的背景,背景是一个无限repeat的图片,控制他的postion定位实现背景移动,不过unity这个内部实现上可能是不一样的,但是可以这么去理解。

教程

首先我们需要一张背景图,我们将其丢入 Textures目录下,这个目录用于存放纹理素材,我们需要将其纹理类型改为默认即可。

补充一些配置,右侧尽量保持一致:

设置完毕后,我们创建一个Materials目录,用于存放材质素材,在该目录新建一个材质,名字随便,比如就叫Background,然后设置Shader为不需要光效的透明渲染方式。

设置成功后,我们创建一个基于世界坐标系的3d组件-四边形。

名字自己随便起,点击该元素,找到右侧的材质选项,将刚刚创建的材质使用。

此时我们ui相关的内容已经创建完本,下面是创建脚本。

Scripts目录下创建一个Background的c#脚本文件,内容如下:

using UnityEngine;

public class Background : MonoBehaviour
{
    /// <summary>
    /// 移动速度
    /// </summary>
    public float speed = 0.1f;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        //随机y轴移动距离
        float y = Mathf.Repeat(Time.time * speed, 1f);
        //创建偏移对象
        Vector2 moveData = new Vector2(0, y);
        //移动材质
        GetComponent<Renderer>().material.SetTextureOffset("_MainTex",moveData);
    }
}

Mathf.Repeat是unity内置的方法,就是求余,第一个参数是除数,第二个是被除数,浮点数求余。

得到结果后创建一个Vector2类型的对象,这个对象用于表示2d对象的坐标和向量,比如材质的纹理偏移量,在有些情况可能需要使用3d的Vector3类型,不过这里用不到。

由于我们是纯y轴的移动所以第一个参数x轴保持0即可。

最后通过GetComponent通过传入泛型的方式获取到Renderer,Renderer对象上才有material材质,然后设置SetTextureOffset的偏移量。

SetTextureOffset第一个参数是name,纹理的偏移name,unity默认为"_MainTex",也就是主纹理,因为纹理是可以多个的,比如一个游戏人物可能第一层是纯色的衣服,然后再盖一层花纹纹理,这样服饰就有各种样式了。

第二个参数是偏移数据对象。

此时我们保存,将脚本挂载到刚刚创建的四边形对象上,运行游戏,背景就实现了无限滚动的效果。

版权申明

本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

关于作者

站点职位 博主
获得点赞 11
文章被阅读 177

相关文章

目录树