在编辑器模式下显示标准小物件
Showing standard gizmos in editor mode
我正在为 Unity 编辑器编写一个扩展,想知道是否有办法在编辑模式下在场景视图中显示 rescaling/moving 碰撞体的多重 gizmo?我不想重新发明轮子并创建客户小玩意儿(已经开始我的丑陋版本了!)
谢谢!
也许你指的是这个:
或者你的意思是你自己的复合碰撞器的小玩意儿?
我想你是在谈论 Handles。
文档中有关于如何使用它们的示例,例如Handles.PositionHandle, Handles.RotationHandle and Handles.ScaleHandle.
通常你应该在 OnSceneGUI.
中使用它们
Vector3 newPosition = Handles.PositionHandle(currentPosition, Quaternion.identity);
Quaternion newRotation = RotationHandle(currentRotation, position);
Vector3 newScale = ScaleHandle(currentScale, position, rotation, handleSize);
但是我总是建议使用正确的 SerializedProperty
来避免 Undo/Redo 的问题,并将事情标记为脏 + 保存等
只是一个示例(这不会覆盖 Transform 的默认句柄,因此可能会造成混淆)
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(Transform), true, isFallback = false)]
public class TransformEditor : Editor
{
private SerializedProperty position;
private SerializedProperty rotation;
private SerializedProperty scale;
private void OnEnable()
{
position = serializedObject.FindProperty("m_LocalPosition");
rotation = serializedObject.FindProperty("m_LocalRotation");
scale = serializedObject.FindProperty("m_LocalScale");
}
private void OnSceneGUI()
{
serializedObject.Update();
position.vector3Value = Handles.PositionHandle(position.vector3Value, Quaternion.identity);
rotation.quaternionValue = Handles.RotationHandle(rotation.quaternionValue, position.vector3Value);
scale.vector3Value = Handles.ScaleHandle(scale.vector3Value, position.vector3Value, rotation.quaternionValue, 1);
serializedObject.ApplyModifiedProperties();
}
}
我正在为 Unity 编辑器编写一个扩展,想知道是否有办法在编辑模式下在场景视图中显示 rescaling/moving 碰撞体的多重 gizmo?我不想重新发明轮子并创建客户小玩意儿(已经开始我的丑陋版本了!) 谢谢!
也许你指的是这个:
或者你的意思是你自己的复合碰撞器的小玩意儿?
我想你是在谈论 Handles。
文档中有关于如何使用它们的示例,例如Handles.PositionHandle, Handles.RotationHandle and Handles.ScaleHandle.
通常你应该在 OnSceneGUI.
中使用它们Vector3 newPosition = Handles.PositionHandle(currentPosition, Quaternion.identity);
Quaternion newRotation = RotationHandle(currentRotation, position);
Vector3 newScale = ScaleHandle(currentScale, position, rotation, handleSize);
但是我总是建议使用正确的 SerializedProperty
来避免 Undo/Redo 的问题,并将事情标记为脏 + 保存等
只是一个示例(这不会覆盖 Transform 的默认句柄,因此可能会造成混淆)
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(Transform), true, isFallback = false)]
public class TransformEditor : Editor
{
private SerializedProperty position;
private SerializedProperty rotation;
private SerializedProperty scale;
private void OnEnable()
{
position = serializedObject.FindProperty("m_LocalPosition");
rotation = serializedObject.FindProperty("m_LocalRotation");
scale = serializedObject.FindProperty("m_LocalScale");
}
private void OnSceneGUI()
{
serializedObject.Update();
position.vector3Value = Handles.PositionHandle(position.vector3Value, Quaternion.identity);
rotation.quaternionValue = Handles.RotationHandle(rotation.quaternionValue, position.vector3Value);
scale.vector3Value = Handles.ScaleHandle(scale.vector3Value, position.vector3Value, rotation.quaternionValue, 1);
serializedObject.ApplyModifiedProperties();
}
}