Skip to content

EUISceneNode ​

概览 ​

字段值
KindUnit · 单位 Unit
Realmcommon

继承关系 ​

  • Unit(4 属性 / 25 函数 / 6 事件)
    • EUINodeBase(35 属性 / 12 函数 / 4 事件)
      • [EUISceneNode](5 属性 / 1 函数)

继承成员 ​

2 个来源 / 38 属性 / 36 函数 / 10 事件

EUISceneNode 是用于把 UI 放到三维世界中的场景界面节点,可设置世界坐标,也可挂接到 Unit 的指定 socket。

适用场景 ​

常用于角色头顶名称、血条、交互提示等跟随场景对象显示的 UI。

使用要点 ​

通过 Players.LocalPlayer.PlayerGui.EuiManager 的 CreateSceneNodeAtPosition(position, nodeInfo) 创建固定位置节点,或用 CreateSceneNodeAttachUnit 创建跟随节点;需要重新绑定已有节点时调用 AttachUnit(unit, socket)。

注意事项 ​

EUISceneNode 不支持类型直接构造。可通过 EUIManager 的公开创建接口获取实例,也可通过 World:CreateUnit 创建;使用 World 工厂时须提供有效的 EUI 根/父节点。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类型默认值说明
PositionVector3[0, 0, 0]场景节点的世界坐标;可在 CreateSceneNodeAtPosition 创建时传入,也可通过公开属性赋值更新。
BindSocketString""BindSocket 是 EUISceneNode 上的字符串属性,用于指定该节点绑定到 Unit 上的位置(socket)名称。默认值为空字符串。
InheritVisibleBoolfalseInheritVisible 是 EUISceneNode 上的布尔属性,用于控制该场景节点是否跟随所绑定 Unit 的显隐状态。默认值为 false。
MaxVisibleDistanceFloat-1MaxVisibleDistance 是 EUISceneNode 上的浮点属性,表示节点相对于摄像机的最大可见距离,取负数时表示永远可见。默认值为 -1。
AutoScaleEnabledBooltrueAutoScaleEnabled 是 EUISceneNode 上的布尔属性,用于控制该场景节点是否开启自动缩放(近大远小)。默认值为 true,可在节点实例上读取或修改。

关联类型 ​

函数 (1) ​

AttachUnit ​

签名:AttachUnit(unit: Unit, socket: String) -> void

将当前场景 UI 节点绑定到指定 Unit 的挂点;unit 是目标单位,socket 是该单位上的挂点名称。绑定后,UI 节点随目标单位移动。

参数类型说明
unitUnit要挂接的目标 Unit 实例。
socketString目标 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