要在 Inspector 面板中只读地显示物体的世界坐标和局部坐标,可以利用 Unity 的 自定义编辑器 (CustomEditor) 功能。下面给出一个示例做法:
1. 在项目中创建 Editor 文件夹
在 Unity 项目中,必须将自定义编辑器脚本放在名为 Editor 的文件夹里,比如 Assets/Editor/
,否则 Unity 不会将其识别为编辑器代码。
2. 编写自定义编辑器脚本
新建一个 C# 脚本,命名为 CustomTransformInspector.cs
,并放到 Assets/Editor/
文件夹中。代码示例:
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Transform))]
public class CustomTransformInspector : Editor
{
public override void OnInspectorGUI()
{
// 调用默认的 Transform Inspector
base.OnInspectorGUI();
// 获取目标 Transform
Transform t = (Transform)target;
// 计算世界坐标和本地坐标
Vector3 worldPos = t.position;
Vector3 localPos = t.localPosition;
// 显示只读字段
GUI.enabled = false; // 禁止编辑
EditorGUILayout.Vector3Field("World Position", worldPos);
EditorGUILayout.Vector3Field("Local Position", localPos);
GUI.enabled = true; // 恢复可编辑
}
}
脚本作用:
[CustomEditor(typeof(Transform))]
指定这是给 Transform 组件编写的自定义编辑器。base.OnInspectorGUI()
会先绘制 Unity 默认的 Transform Inspector 面板。- 然后用
EditorGUILayout.Vector3Field
显示额外的两个只读字段:世界坐标和局部坐标。 - 通过
GUI.enabled = false
来让它成为只读不可修改的显示。
- 回到 Unity,让它编译完脚本。
- 在 Hierarchy 中选中任何物体,查看
Inspector
面板,你会看到:- Unity 原本的 Position / Rotation / Scale(这是局部坐标)
- 下面多出两个只读的 World Position 和 Local Position(局部坐标) 字段。
这样一来,就能在 Inspector 中实时查看该物体当前的世界坐标和局部坐标,并且这两个字段不会被允许编辑。