我们通常在Unity资源商店下载水资源,但也有些人想制作自己的水资源,现在教大家制作一个简单的水体资源,后续功能需要自己添加
首先创建一个面板,给他创建一个新的脚本,命名为:Water
public float 波浪高度 = 0.05f;
public float 波浪速度 = 1f;
public float 波长 = 1f;
public float 噪声缩放 = 0.1f;
private MeshFilter 网格过滤器;
private Vector3[] 原始顶点;
private Vector3[] 顶点;
private void Start()
{
网格过滤器 = GetComponent<MeshFilter>();
原始顶点 = 网格过滤器.mesh.vertices;
顶点 = new Vector3[原始顶点.Length];
}
private void Update()
{
更新波浪();
更新网格();
}
private void 更新波浪()
{
for (int i = 0; i < 顶点.Length; i++)
{
Vector3 顶点坐标 = 原始顶点[i];
顶点坐标.y = Mathf.Sin((Time.time * 波浪速度 + (顶点坐标.x + 顶点坐标.z) / 波长)) * 波浪高度;
顶点[i] = 顶点坐标;
}
}
private void 更新网格()
{
网格过滤器.mesh.vertices = 顶点;
网格过滤器.mesh.RecalculateNormals();
网格过滤器.mesh.RecalculateBounds();
MeshCollider 网格碰撞器 = GetComponent<MeshCollider>();
网格碰撞器.sharedMesh = null;
网格碰撞器.sharedMesh = 网格过滤器.mesh;
}
插入以上代码会发现面板开始荡漾起来
水资源图片可以上网查找
接下来配置贴图和发线贴图
按照我这种格式配置水面贴图
蓝色部分按照实际情况调色,红色部分我用了网上找的两个不同的水资源贴图,可以抠图也可以不抠图
这时候进入游戏会发现水能飘荡,贴图也配置正确,但是水面还是静态的,所以得在面板点击
添加组件,添加新的脚本,脚本的名字:WaterTex
粘贴以下代码:
public float 速度 = 0.5f;
private Renderer 渲染器;
private Material 材质;
private Vector2 偏移量;
private void Start()
{
渲染器 = GetComponent<Renderer>();
材质 = 渲染器.material;
偏移量 = 材质.GetTextureOffset("_MainTex");
}
private void Update()
{
float 新偏移量X = 偏移量.x + 速度 * Time.deltaTime;
float 新偏移量Y = 偏移量.y + 速度 * Time.deltaTime;
if (新偏移量X > 1f)
新偏移量X -= 1f;
if (新偏移量Y > 1f)
新偏移量Y -= 1f;
偏移量.x = 新偏移量X;
偏移量.y = 新偏移量Y;
材质.SetTextureOffset("_MainTex", 偏移量);
}
进入游戏之后会发现材质也跟着动起来了,最终效果