Unity简单湖面水特效——(通过修改网格顶点,在一定区间内波动)

发布时间 2024-01-04 11:39:42作者: SummerTrainnn
using UnityEngine;

public class OceanWave : MonoBehaviour
{
    //海浪的速度
    public float waveSpeed = 1f;
    //海浪的大小
    public float waveScale = 0.5f;
    //海浪的高度
    public float waveHeight = 0.5f;

    private Mesh mesh;
    private Vector3[] originalVertices;
    private Vector3[] currentVertices;

    private void Start()
    {
        mesh = GetComponent<MeshFilter>().mesh;
        originalVertices = mesh.vertices;
        currentVertices = new Vector3[originalVertices.Length];
    }

    private void Update()
    {
        for (int i = 0; i < originalVertices.Length; i++)
        {
            Vector3 newVertex = originalVertices[i];
            newVertex.y += Mathf.Sin(Time.time * waveSpeed + originalVertices[i].x + originalVertices[i].z) * waveScale * waveHeight;
            currentVertices[i] = newVertex;
        }
        mesh.vertices = currentVertices;
        mesh.RecalculateNormals();
    }
}