Godot gdnative Rust access 属性 在编辑器中定义
Godot gdnative Rust access property defined in the editor
为了了解引擎,我正在尝试一个非常简单的项目——使用编辑器和 gdnative Rust 绑定程序生成一个球体。
我正在尝试跟进使用 GDScript 的 this tutorial 并将
Rust 代码。
我无法弄清楚如何访问编辑器中定义的 属性。
我已经阅读文档并在网上搜索了一个星期,但是有
有些事情让我无法理解,我无法理解如何处理它。
我想做的是访问 ArrayMesh 类型的 mesh
属性,就像我在上面链接的教程中一样,并将我为顶点 - 基本上将这些数组绑定到 ArrayMesh。这是我的场景:
[gd_scene load_steps=4 format=2]
[ext_resource path="res://procedural_earth.gdnlib" type="GDNativeLibrary" id=1]
[sub_resource type="ArrayMesh" id=4]
[sub_resource type="NativeScript" id=3]
resource_name = "ProcEarth"
class_name = "ProcEarth"
library = ExtResource( 1 )
[node name="Earth" type="Spatial"]
[node name="Sphere" type="MeshInstance" parent="."]
mesh = SubResource( 4 )
script = SubResource( 3 )
[node name="Camera" type="Camera" parent="."]
transform = Transform( 0.572229, -0.327396, 0.751909, 0, 0.916856, 0.399217, -0.820094, -0.228443, 0.524651, 4.71648, 2.5, 3.45846 )
current = true
我感兴趣的ArrayMesh结构,在上面的场景中被称为mesh
并且是名为“Sphere”的节点的一部分(为了清楚起见而提及)。
我有以下 Rust 代码:
#[derive(NativeClass)]
#[inherit(MeshInstance)]
#[register_with(register_properties)]
struct ProcEarth {
// ...
}
impl ProcEarth {
// ...
#[export]
fn _ready(&mut self, owner: &MeshInstance) {
let mut arr = VariantArray::new_shared();
// ...
let blend_shapes = VariantArray::new_shared();
owner.add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, arr, blend_shapes, 0);
}
}
但这不起作用,因为我得到的错误是:
no method named `add_surface_from_arrays` found for reference `&gdnative::gdnative_bindings::MeshInstance` in the current scope
method not found in `&gdnative::gdnative_bindings::MeshInstance`rustc(E0599)
有谁知道我如何从编辑器中访问 属性 的 Rust 代码,以便正确设置我的 ArrayMesh?有没有任何教程、文章、视频可以说明这一点?
非常感谢任何指点,因为我目前陷入了这个技术问题
无法进步我的学习。
我在 Linux.
上使用带有 gdnative 0.9.3 的 Godot v3.4.stable.official
方法 add_surface_from_arrays
在 ArrayMesh
中定义。鉴于您遇到的错误,您正试图在 MeshInstance
.
上调用它
我们可以通过源代码确认这一点,因为您得到 owner: &MeshInstance
并且您正在调用 owner.add_surface_from_arrays(…)
。
通常你会创建一个 ArrayMesh
并在其上调用 add_surface_from_arrays
传递一个包含顶点数据的数组。之后,您应该可以在 MeshInstance
上调用 set_mesh
并传递 ArrayMesh
。
let mut am = ArrayMesh::new();
let mut arr = VariantArray::new_shared();
// …
let blend_shapes = VariantArray::new_shared();
am.add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, arr, blend_shapes, 0);
owner.set_mesh(am.cast::<Mesh>());
我相信你可以在 MeshInstance
上调用 mesh
来检索它。请注意,它可以是 Mesh
(ArrayMesh
或 PrimitiveMesh
)或 nil。 方法 mesh
记录在 return Option<Ref<Mesh, Shared>>
。
为了了解引擎,我正在尝试一个非常简单的项目——使用编辑器和 gdnative Rust 绑定程序生成一个球体。 我正在尝试跟进使用 GDScript 的 this tutorial 并将 Rust 代码。
我无法弄清楚如何访问编辑器中定义的 属性。 我已经阅读文档并在网上搜索了一个星期,但是有 有些事情让我无法理解,我无法理解如何处理它。
我想做的是访问 ArrayMesh 类型的 mesh
属性,就像我在上面链接的教程中一样,并将我为顶点 - 基本上将这些数组绑定到 ArrayMesh。这是我的场景:
[gd_scene load_steps=4 format=2]
[ext_resource path="res://procedural_earth.gdnlib" type="GDNativeLibrary" id=1]
[sub_resource type="ArrayMesh" id=4]
[sub_resource type="NativeScript" id=3]
resource_name = "ProcEarth"
class_name = "ProcEarth"
library = ExtResource( 1 )
[node name="Earth" type="Spatial"]
[node name="Sphere" type="MeshInstance" parent="."]
mesh = SubResource( 4 )
script = SubResource( 3 )
[node name="Camera" type="Camera" parent="."]
transform = Transform( 0.572229, -0.327396, 0.751909, 0, 0.916856, 0.399217, -0.820094, -0.228443, 0.524651, 4.71648, 2.5, 3.45846 )
current = true
我感兴趣的ArrayMesh结构,在上面的场景中被称为mesh
并且是名为“Sphere”的节点的一部分(为了清楚起见而提及)。
我有以下 Rust 代码:
#[derive(NativeClass)]
#[inherit(MeshInstance)]
#[register_with(register_properties)]
struct ProcEarth {
// ...
}
impl ProcEarth {
// ...
#[export]
fn _ready(&mut self, owner: &MeshInstance) {
let mut arr = VariantArray::new_shared();
// ...
let blend_shapes = VariantArray::new_shared();
owner.add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, arr, blend_shapes, 0);
}
}
但这不起作用,因为我得到的错误是:
no method named `add_surface_from_arrays` found for reference `&gdnative::gdnative_bindings::MeshInstance` in the current scope
method not found in `&gdnative::gdnative_bindings::MeshInstance`rustc(E0599)
有谁知道我如何从编辑器中访问 属性 的 Rust 代码,以便正确设置我的 ArrayMesh?有没有任何教程、文章、视频可以说明这一点?
非常感谢任何指点,因为我目前陷入了这个技术问题 无法进步我的学习。
我在 Linux.
上使用带有 gdnative 0.9.3 的 Godot v3.4.stable.official方法 add_surface_from_arrays
在 ArrayMesh
中定义。鉴于您遇到的错误,您正试图在 MeshInstance
.
我们可以通过源代码确认这一点,因为您得到 owner: &MeshInstance
并且您正在调用 owner.add_surface_from_arrays(…)
。
通常你会创建一个 ArrayMesh
并在其上调用 add_surface_from_arrays
传递一个包含顶点数据的数组。之后,您应该可以在 MeshInstance
上调用 set_mesh
并传递 ArrayMesh
。
let mut am = ArrayMesh::new();
let mut arr = VariantArray::new_shared();
// …
let blend_shapes = VariantArray::new_shared();
am.add_surface_from_arrays(Mesh::PRIMITIVE_TRIANGLES, arr, blend_shapes, 0);
owner.set_mesh(am.cast::<Mesh>());
我相信你可以在 MeshInstance
上调用 mesh
来检索它。请注意,它可以是 Mesh
(ArrayMesh
或 PrimitiveMesh
)或 nil。 方法 mesh
记录在 return Option<Ref<Mesh, Shared>>
。