我正在编写 Unity 编辑器的扩展,想知道是否有办法在编辑模式下显示用于在场景视图中重新缩放/移动碰撞器的多重小玩意?我不想重新发明轮子并创建自定义小玩意(已经开始了我的丑陋版本!)谢谢!
问问题
629 次
2 回答
0
我认为您在谈论Handles。
在文档中是关于如何使用它们的示例,例如Handles.PositionHandle、Handles.RotationHandle和Handles.ScaleHandle。
通常你应该在OnSceneGUI中使用它们。
Vector3 newPosition = Handles.PositionHandle(currentPosition, Quaternion.identity);
Quaternion newRotation = RotationHandle(currentRotation, position);
Vector3 newScale = ScaleHandle(currentScale, position, rotation, handleSize);
但是,我总是建议宁愿使用正确的SerializedProperty
方法来避免撤消/重做和标记脏东西+保存等问题。
只是一个示例(这不会覆盖 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();
}
}
于 2019-02-18T13:46:02.770 回答