Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
EditorNode3DGizmo¶
继承: Node3DGizmo < RefCounted < Object
用于编辑 Node3D 对象的小工具。
描述¶
小工具可用于为 Node3D 对象提供自定义可视化和编辑功能(控柄和子小工具)。可以被重写以创建自定义小工具,但对于简单的小工具而言,通常建议创建 EditorNode3DGizmoPlugin。
方法¶
void |
_commit_handle ( int id, bool secondary, Variant restore, bool cancel ) virtual |
void |
_commit_subgizmos ( PackedInt32Array ids, Transform3D[] restores, bool cancel ) virtual |
_get_handle_name ( int id, bool secondary ) virtual const |
|
_get_handle_value ( int id, bool secondary ) virtual const |
|
_get_subgizmo_transform ( int id ) virtual const |
|
_is_handle_highlighted ( int id, bool secondary ) virtual const |
|
void |
_redraw ( ) virtual |
void |
_set_handle ( int id, bool secondary, Camera3D camera, Vector2 point ) virtual |
void |
_set_subgizmo_transform ( int id, Transform3D transform ) virtual |
_subgizmos_intersect_frustum ( Camera3D camera, Plane[] frustum ) virtual const |
|
_subgizmos_intersect_ray ( Camera3D camera, Vector2 point ) virtual const |
|
void |
add_collision_segments ( PackedVector3Array segments ) |
void |
add_collision_triangles ( TriangleMesh triangles ) |
void |
add_handles ( PackedVector3Array handles, Material material, PackedInt32Array ids, bool billboard=false, bool secondary=false ) |
void |
add_lines ( PackedVector3Array lines, Material material, bool billboard=false, Color modulate=Color(1, 1, 1, 1) ) |
void |
add_mesh ( Mesh mesh, Material material=null, Transform3D transform=Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), SkinReference skeleton=null ) |
void |
add_unscaled_billboard ( Material material, float default_scale=1, Color modulate=Color(1, 1, 1, 1) ) |
void |
clear ( ) |
get_node_3d ( ) const |
|
get_plugin ( ) const |
|
get_subgizmo_selection ( ) const |
|
is_subgizmo_selected ( int id ) const |
|
void |
set_hidden ( bool hidden ) |
void |
set_node_3d ( Node node ) |
方法说明¶
void _commit_handle ( int id, bool secondary, Variant restore, bool cancel ) virtual
覆盖该方法,以提交一个正在编辑的控柄(控柄必须是之前通过 add_handles 添加的)。这通常意味着为该修改创建一个 UndoRedo 动作,将当前控柄值用作“做”,并将 restore
参数用作“撤销”。
如果 cancel
参数为 true
,则应直接设置 restore
值,而不需要任何 UndoRedo 动作。
当提交的控柄为次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
void _commit_subgizmos ( PackedInt32Array ids, Transform3D[] restores, bool cancel ) virtual
覆盖该方法,以提交一组正在编辑的子小工具(参见 _subgizmos_intersect_ray 和 _subgizmos_intersect_frustum)。这通常意味着为该更改创建一个 UndoRedo 动作,将当前变换用作“做”,并将 restores
变换用作“撤消”。
如果 cancel
参数为 true
,则restores
变换应被直接设置 ,而无需任何 UndoRedo 动作。
String _get_handle_name ( int id, bool secondary ) virtual const
覆盖该方法,以返回编辑的控柄的名称(控柄必须先前通过 add_handles 添加的)。可以命名控柄以供用户在编辑时引用。
当请求的控柄是次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
Variant _get_handle_value ( int id, bool secondary ) virtual const
覆盖该方法,以返回一个控柄的当前值。该值将在编辑开始时被请求,并用作 _commit_handle 中的 restore
参数。
当请求的控柄是次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
Transform3D _get_subgizmo_transform ( int id ) virtual const
覆盖该方法,以返回子小工具的当前变换。该变换将在编辑开始时被请求,并用作 _commit_subgizmos 中的 restore
参数。
bool _is_handle_highlighted ( int id, bool secondary ) virtual const
覆盖该方法,只要给定的控柄应该在编辑器中被高亮显示时就返回 true
。
当请求的控柄是次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
void _redraw ( ) virtual
覆盖该方法,每当请求小工具更新时将添加所有小工具元素。通常在该方法的开头调用 clear,然后根据节点的属性添加可视元素。
void _set_handle ( int id, bool secondary, Camera3D camera, Vector2 point ) virtual
覆盖该方法,当用户拖动小工具控柄(之前使用 add_handles 添加的)时更新节点属性。提供的 point
是屏幕坐标中的鼠标位置, camera
可用于将其转换为射线投射。
当编辑的控柄是次要控柄时,secondary
参数为 true
(有关更多信息,请参阅 add_handles)。
void _set_subgizmo_transform ( int id, Transform3D transform ) virtual
覆盖该方法,以在子小工具编辑期间更新节点属性(参见 _subgizmos_intersect_ray 和 _subgizmos_intersect_frustum)。transform
是在 Node3D 的局部坐标系中给出的。
PackedInt32Array _subgizmos_intersect_frustum ( Camera3D camera, Plane[] frustum ) virtual const
覆盖该方法,以允许使用鼠标拖动框选来选择子小工具。给定一个 camera
和一个 frustum
,这个方法应该返回哪些子小工具包含在锥体中。frustum
参数由一个数组组成,其中包含构成选择锥体的所有 Plane。返回的值应该包含一个唯一的子小工具标识符列表,它可以有任何非负值,并将用于其他虚方法,如 _get_subgizmo_transform 或 _commit_subgizmos。
int _subgizmos_intersect_ray ( Camera3D camera, Vector2 point ) virtual const
覆盖该方法,以允许使用鼠标点击选择子小工具。给定屏幕坐标中的 camera
和 point
时,该方法应返回应选择哪个子小工具。返回值应该是一个唯一的子小工具标识符,它可以有任何非负值,并将用于其他虚方法,如 _get_subgizmo_transform 或 _commit_subgizmos。
void add_collision_segments ( PackedVector3Array segments )
将指定的 segments
添加到小工具的碰撞形状以进行拾取。在 _redraw 期间调用该方法。
void add_collision_triangles ( TriangleMesh triangles )
将碰撞三角形添加到小工具以进行拾取。TriangleMesh 也可以从常规 Mesh 生成。在 _redraw 期间调用该方法。
void add_handles ( PackedVector3Array handles, Material material, PackedInt32Array ids, bool billboard=false, bool secondary=false )
添加可用于编辑该小工具的 Node3D 属性的一组控柄(点)。ids
参数可用于为每个控柄指定一个自定义的标识符,如果传递了一个空的数组,id 将按照 handles
参数顺序自动分配。
secondary
参数将添加的控柄标记为次要控柄,这意味着它们通常比普通控柄具有更低的选择优先级。当用户按住 Shift 键时,次要控柄将被切换为比普通控柄具有更高的优先级。这种优先级的变化可用于在同一点放置多个控柄,同时仍让用户控制他们的选择。
这些虚方法将在编辑这些控柄时被调用。在 _redraw 期间将调用该方法。
void add_lines ( PackedVector3Array lines, Material material, bool billboard=false, Color modulate=Color(1, 1, 1, 1) )
为小工具添加使用给定材质的线段(一对对点的集合)。线段将用于展示和选择。请在 _redraw 期间调用此方法。
void add_mesh ( Mesh mesh, Material material=null, Transform3D transform=Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), SkinReference skeleton=null )
为小工具添加网格,可以指定材质 material
、本地变换 transform
和骨架 skeleton
。请在 _redraw 期间调用此方法。
void add_unscaled_billboard ( Material material, float default_scale=1, Color modulate=Color(1, 1, 1, 1) )
添加未缩放的公告板,将用于展示和选择。请在 _redraw 期间调用此方法。
void clear ( )
移除小工具中的一切,包括网格、碰撞和控柄。
Node3D get_node_3d ( ) const
返回与这个小工具关联的 Node3D 节点。
EditorNode3DGizmoPlugin get_plugin ( ) const
返回拥有该小工具的 EditorNode3DGizmoPlugin。可以在使用 EditorNode3DGizmoPlugin.get_material 获取材质时使用。
PackedInt32Array get_subgizmo_selection ( ) const
返回当前选定的子小工具的列表。可用于在 _redraw 期间高亮显示所选元素。
bool is_subgizmo_selected ( int id ) const
如果给定的子小工具是当前所选定的,则返回 true
。可用于在 _redraw 期间高亮显示所选元素。
设置该小工具的隐藏状态。如果为 true
,则该小工具将被隐藏。如果为 false
则会显示。
void set_node_3d ( Node node )