进入播放模式后,我试图在Unity游戏运行时连续更改脚本。我制作了一个程序生成的网格,并为脚本分配了网格碰撞器,过滤器和渲染器组件。
现在,我希望网格在游戏运行时改变高度。我认为可以在Update
函数中完成此操作,但不确定如何实现。
这是到目前为止我得到的:
void Start()
{
mesh = new Mesh();
MeshFilter filter = gameObject.AddComponent<MeshFilter>();
MeshRenderer render = gameObject.AddComponent<MeshRenderer>();
GetComponent<MeshFilter>().mesh = mesh;
GetComponent<Renderer>().material = grassMat;
CreateShape();
UpdateMesh();
}
void UpdateMesh()
{
mesh.Clear();
mesh.vertices = vertices;
mesh.triangles = triangles;
MeshCollider collider = gameObject.AddComponent<MeshCollider>();
mesh.RecalculateNormals();
}
由于示例代码并未真正完成,我将指出一些常见的可能错误:
void Update()将根据您的帧速率调用每帧,void FixedUpdate()将以半固定帧速率调用每帧。如果希望每个(固定)帧都发生一些事情,则应将代码放在其中。在您的示例中,您仅将方法命名为void UpdateMesh(),这并不意味着它在每一帧都被调用:https://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html
从您发布的代码中尚不清楚,如果在void UpdateMesh()中根本没有发生任何更改。例如,没有代码可以更改顶点的位置。