接上文 基于概率的循环地图 Unlit Shader http://t.csdn.cn/d7WaR
本教程将介绍如何使用 `GrassOffset` 脚本,使角色在循环地图中移动时,地面纹理跟随角色移动。这将创建一个无限循环的地图效果。
using UnityEngine;public class GrassOffset : MonoBehaviou
{/// /// 渲染/// public MeshRenderer mr; /// /// 地图中移动的人物/// public Transform targetTransform;/// /// 单张图片在世界中的缩放/// public Vector2 textureMultiplier = new Vector2(7,7);/// /// 缩放/// private Vector2 tilling;/// /// offset 的缩放比例/// private Vector2 offsetMultiplier;void Start(){tilling = mr.material.GetTextureScale("_MainTex");offsetMultiplier.x = -1 / textureMultiplier.x;offsetMultiplier.y = -1 / textureMultiplier.y;}void FixedUpdate(){if(targetTransform != null){Vector2 offset = new Vector2(-targetTransform.position.x * offsetMultiplier.x,-targetTransform.position.z * offsetMultiplier.y);offset.x %= tilling.x;offset.y %= tilling.y;mr.material.SetTextureOffset("_MainTex", offset);this.transform.position = targetTransform.position + Vector3.down;}}
}
`GrassOffset` 脚本用于将角色在循环地图中的移动与地面纹理的 Offset 值关联起来。该脚本需要以下几个参数:
`MeshRenderer mr`:渲染循环地图的 MeshRenderer 组件。
`Transform targetTransform`:在循环地图中移动的角色的 Transform。
`Vector2 textureMultiplier`:单张纹理在世界中的缩放值。
`Vector2 tilling`:用于存储 _MainTex 的 Tiling 值。
`Vector2 offsetMultiplier`:Offset 的缩放比例。
将 `GrassOffset` 脚本添加到一个游戏对象上(例如,空的游戏对象或场景中的摄像机)。
在脚本组件的 "Mesh Renderer" 属性中,将渲染循环地图的 MeshRenderer 组件拖放到属性框中。
在 "Target Transform" 属性中,拖放您希望在循环地图中移动的角色的 Transform。
您可以通过调整 "Texture Multiplier" 属性来控制纹理在世界中的缩放。
运行场景后,您将看到角色在循环地图中移动时,地面纹理会跟随角色移动,实现无限循环地图效果。