卷轴地图
雷电这种飞机游戏,他的地图是一个无限滚动的背景,最直白的一个办法就是做两张图,然后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"
,也就是主纹理,因为纹理是可以多个的,比如一个游戏人物可能第一层是纯色的衣服,然后再盖一层花纹纹理,这样服饰就有各种样式了。
第二个参数是偏移数据对象。
此时我们保存,将脚本挂载到刚刚创建的四边形对象上,运行游戏,背景就实现了无限滚动的效果。
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据