在编辑器模式下显示标准小控件

时间:2019-02-18 13:22:05

标签: c# unity3d collider unity3d-editor sceneview

我正在编写Unity编辑器的扩展,并且想知道是否有一种方法可以显示在编辑模式下在场景视图中缩放/移动碰撞器的multiplbe gizmos吗?我不想重新发明轮子并创建自定义小控件(已经开始执行我的丑陋版本!) 谢谢!

2 个答案:

答案 0 :(得分:0)

也许你是说这个:

enter image description here

或者您是指自己的复合对撞机的小玩意儿?

答案 1 :(得分:0)

我认为您是在谈论Handles

文档中提供了有关如何使用它们的示例,例如Handles.PositionHandleHandles.RotationHandleHandles.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();
    }
}