主题
EUISceneNode
概览
| 字段 | 值 |
|---|---|
| Kind | Unit · 单位 Unit |
| Realm | common |
继承关系
- Unit(4 属性 / 25 函数 / 6 事件)
- EUINodeBase(34 属性 / 8 函数 / 4 事件)
- [EUISceneNode](5 属性 / 1 函数)
- EUINodeBase(34 属性 / 8 函数 / 4 事件)
继承成员
2 个来源 / 38 属性 / 33 函数 / 10 事件
- 来自 EUINodeBase(34 属性 / 8 函数 / 4 事件)
- 属性:
Visible、Position、Anchor、FlippedX、FlippedY、Size、Rotation、Opacity、TouchBeginAudio、TouchEndAudio、TouchClickAudio、TouchbeginEvent、ClickEvent、TouchendEvent、LongtouchEvent、ShowEvent、HideEvent、TouchEnabled、SwallowTouchEnabled、TopAdaptMode、TopAdaption、BottomAdaptMode、BottomAdaption、LeftAdaptMode、LeftAdaption、RightAdaptMode、RightAdaption、AnchorXAdaptMode、AnchorXAdaption、AnchorYAdaptMode、AnchorYAdaption、LocalZOrder、LayoutOrder、Scale - 函数:
RemoveFromParent、GetFullPath、TweenPosition、TweenSize、TweenSizeAndPosition、TweenOpacity、Retain、Release - 事件:
OnTouchBegan、OnTouchMoved、OnTouchEnded、OnClicked
- 属性:
- 来自 Unit(4 属性 / 25 函数 / 6 事件)
- 属性:
AssetId、Name、Desc、Parent - 函数:
ClearAllChildren、GetChildren、GetDescendants、IsAncestorOf、IsDescendantOf、FindFirstAncestor、FindFirstAncestorWhichIsA、FindFirstAncestorOfClass、FindFirstChild、FindFirstChildWhichIsA、FindFirstChildOfClass、HasChildren、GetChildCount、GetChildAtIndex、SetAttribute、GetAttribute、GetAllProps、Clone、IsA、Destroy、GetPropertyChangedSignal、GetAttributeChangedSignal、FindFromPath、GetFullPath、GetDebugId - 事件:
ChildAdded、ChildRemoved、DescendantAdded、DescendantRemoving、AncestryChanged、Destroying
- 属性:
EUISceneNode 是用于把 UI 放到三维世界中的场景界面节点,可设置世界坐标,也可挂接到 Unit 的指定 socket。
适用场景
常用于角色头顶名称、血条、交互提示等跟随场景对象显示的 UI。
使用要点
通过 Players.LocalPlayer.PlayerGui.EuiManager 的 CreateSceneNodeAtPosition(position, nodeInfo) 创建固定位置节点,或用 CreateSceneNodeAttachUnit 创建跟随节点;需要重新绑定已有节点时调用 AttachUnit(unit, socket)。
注意事项
EUISceneNode 不能直接调用类型构造函数,也不能通过 World:CreateUnit 创建。应通过 EUIManager 的公开创建接口获取实例;Position 的 editable=false 只表示不在编辑器面板编辑,并非 Lua 只读,作者侧可通过公开属性赋值更新。AttachUnit 的第一个参数必须是已存在的 Unit 实例,socket 为挂点名称字符串。
代码示例
创建三维场景 UI 节点
lua
-- @runtime client
local Players = game:GetService("Players")
local localPlayer = Players.LocalPlayer
if localPlayer == nil then return end
local euiManager = localPlayer.PlayerGui.EuiManager
local sceneNode = euiManager:CreateSceneNodeAtPosition(
Vector3.New(0, 5, 0),
{ InheritVisible = true, MaxVisibleDistance = 50 }
)
sceneNode.Position = Vector3.New(2, 6, 0)属性 (5)
| Name | 类型 | 默认值 | 说明 |
|---|---|---|---|
Position | Vector3 | [0, 0, 0] | 场景节点的世界坐标;可在 CreateSceneNodeAtPosition 创建时传入,也可通过公开属性赋值更新。 |
BindSocket | String | "" | 场景节点绑定的挂接点名称,用于指定节点在目标 Unit 上的附着位置。 |
InheritVisible | Bool | false | 控制场景节点是否跟随所绑定 Unit 的可见性状态。 |
MaxVisibleDistance | Float | -1 | 场景节点相对于摄像机的最大可见距离,超过此距离节点将不可见。 |
AutoScaleEnabled | Bool | true | 开启自动缩放(近大远小) |
关联类型
函数 (1)
AttachUnit
签名:AttachUnit(unit: Unit, socket: String) -> void
将指定的 Unit 实例绑定到 EUISceneNode 上,使该场景节点可以跟随目标单位进行显示。通过传入单位对象和挂点名称,可以将场景 UI 元素附着到单位的指定骨骼或挂点上。
| 参数 | 类型 | 说明 |
|---|---|---|
unit | Unit | 要挂接的目标 Unit 实例。 |
socket | String | 目标 Unit 上的挂点名称字符串,例如 "Head"。 |
返回值 void
示例代码
把场景 UI 绑定到已有目标单位
lua
-- @runtime client
local World = game:GetService("World")
local sceneNode = World:FindFirstChild("QuestMarkerUI", true)
local target = World:FindFirstChild("QuestTarget", true)
if sceneNode ~= nil and target ~= nil then
sceneNode:AttachUnit(target, "Head")
end