首页 > 解决方案 > 如何在游戏运行时使用 C# 脚本修改我的网格

问题描述

在我进入播放模式后,我正在尝试在 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(); 
} 

标签: c#unity3dmesh

解决方案


由于示例代码并不完整,我会指出一些常见的可能错误:

  • void Update() 根据您的帧速率每帧调用一次, void FixedUpdate() 在半固定帧速率上每帧调用一次。如果您希望每个(固定)帧都发生一些事情,您应该将代码放在那里。在您的示例中,您刚刚将您的方法命名为 void UpdateMesh(),这并不意味着它在每一帧都被调用:https ://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html

  • 从您发布的代码来看,尚不清楚 void UpdateMesh() 中是否发生了变化。例如,没有改变顶点位置的代码。


推荐阅读