求解,运行时创建的Mesh为什么无法设置顶点数据?
unity3d吧
全部回复
仅看楼主
level 6
corpus 楼主
今天刚好要用到运行时创建和修改mesh的功能。在官方文档里查到有例子,遂照做。(我用的是4.6.1版的unity)
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
void Start()
{
gameObject.AddComponent<MeshFilter>();
gameObject.AddComponent<MeshRenderer>();
Mesh mesh = GetComponent<MeshFilter>().mesh;
mesh.Clear();
mesh.vertices = new Vector3[] {new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0)};
mesh.uv = new Vector2[] {new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1)}; mesh.SetIndices( new int[] {0, 1, 2}, MeshTopology.Triangles, 0 );
}
}
结果发现一运行就报错。说是
Not allowed to access vertices on mesh 'XXXXXXX'
UnityEngine.Mesh:set_vertices(Vector3[])
Not allowed to access uv on mesh 'XXXXXXX'
UnityEngine.Mesh:set_uv(Vector2[])
Not allowed to call SetIndices() on mesh 'XXXXXXX'
UnityEngine.Mesh:SetIndices(Int32[], MeshTopology, Int32)
这个和文档上的例子一样的,难道4.6.x版以后又有什么改动没加入文档说明中。我也查看了文档,发现mesh里面能用的方法也就那么几个,不知道大家都是怎么解决这个问题的?
2015年05月21日 14点05分 1
level 12
你要new个mesh赋值给meshfilter,否则实在修改默认内置mesh,比如你那个可能是个内置的cube吧?
2015年05月21日 14点05分 2
谢谢回复。我试了一下,确实是new 一个mesh不一样。那个报错的问题我发现是我在一个函数里执行过一次对 mesh.vertices 的赋值,之后又执行第二次赋值的时候就报错了。如果只执行一次就不报错。
2015年05月21日 15点05分
@corpus 但是文档里写的每帧修改顶点数据的方法我这里还是报那个错。
2015年05月21日 15点05分
level 6
corpus 楼主
难道是我多此一举了,看到mesh里面有个UploadMeshData()函数。开始以为是像DX里面flush buffer那样对顶点数据做修改之后要把改动的数据提交到实际buffer中,所以我也手动调用了这个函数。结果发现只要把这个去掉就不报错了,画面上也出现模型了。
2015年05月21日 15点05分 3
1