我正在尝试从MeshInstance节点访问网格的数据,但没有成功。
我已导入3d对象,将其打开为“新继承的”,将其设置为“唯一”,并将其另存为 foo.mesh 。然后,在一个新场景中,我确实创建了一个MeshInstance并将foo.mesh加载为它的Mesh。
该脚本附加到了MeshInstance上,如下所示:
extends MeshInstance
func _ready():
var themesh = Mesh
var mdt = MeshDataTool.new()
if mdt.create_from_surface(themesh, 0):
print("Ok!!")
print(mdt.get_vertex_count()) # get_vertex_count() returns 0
else:
print("Failed...")
答案 0 :(得分:0)
不适用于内置网格。需要是一个导入的网格物体,我也将其另存为Godot .mesh 。
参考链接:Facebook,Mesh Data Tool,Mesh Class
我误以为指向 Mesh 类而不是 mesh 属性来获取网格参考。而且if测试需要检查是否通过,因为发生错误时,“ create_from_surface()”将返回非零值。
extends MeshInstance
func _ready():
var themesh = mesh # Same as bellow, points to same object in memory
var themesh2 = self.get_mesh() # Same as above, points to same object in memory
print("Mesh surface count: " + str(themesh.get_surface_count()))
var mdt = MeshDataTool.new()
if mdt.create_from_surface(themesh, 0) == OK: # Check pass
print("Ok!!")
print(mdt.get_vertex_count())
else:
print("Fail...")
var aMeshVerts = []
for i in range(mdt.get_vertex_count()):
aMeshVerts.append(mdt.get_vertex(i)) # Storing the vertices positions
mdt.set_vertex(0, Vector3(1, 2, 1)) # Changing a vertice position
themesh.surface_remove(0)
mdt.commit_to_surface(themesh)
mdt.clear()