c# - 如何在游戏运行时使用 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();
}
解决方案
由于示例代码并不完整,我会指出一些常见的可能错误:
void Update() 根据您的帧速率每帧调用一次, void FixedUpdate() 在半固定帧速率上每帧调用一次。如果您希望每个(固定)帧都发生一些事情,您应该将代码放在那里。在您的示例中,您刚刚将您的方法命名为 void UpdateMesh(),这并不意味着它在每一帧都被调用:https ://docs.unity3d.com/ScriptReference/MonoBehaviour.FixedUpdate.html
从您发布的代码来看,尚不清楚 void UpdateMesh() 中是否发生了变化。例如,没有改变顶点位置的代码。
推荐阅读
- gradle - 无法将 gradle wrapper 从版本 2.1 升级到 6.5.1
- encoding - 将二进制数据编码为 ASCII,同时保留其大部分有效字符
- javascript - 当我从 JavaScript 中的数组中单击时如何获取该按钮的特定数组
- javascript - 为什么使用 Vue.js 时 Firebase 实时数据库中的数据仅在控制台中呈现,而不在页面上呈现?
- sql - 如何将 TIMESTAMP WITH TIMEZONE 转换为 TIMESTAMP 但在 SQL 中保持本地时间
- javascript - vuejs 制作对象数据数组
- batch-file - How do I make a batch file that opens certain programs?
- php - Trying to run php file in cmd, without using xampp, however it's not working
- html - 怎么弄成这样的线?
- c++ - SIMD min 比正常标量慢