Version: 2021.1

Handles.PositionHandle

切换到手册
public static Vector3 PositionHandle (Vector3 position, Quaternion rotation);

参数

position 3D 空间中手柄的中心位置。
rotation 3D 空间中手柄的方向。

返回

Vector3 通过用户与手柄的交互修改的新值。如果用户没有移动手柄,则将返回您传递给相应函数的值。

描述

创建一个位置手柄。

此手柄的行为类似于 Unity 中的内置移动工具。

\ 场景视图中的位置手柄。

将以下脚本作为 PositionHandleExample.cs 添加到 Assets 文件夹,然后将 PositionHandleExample 组件添加到场景中的对象。

using UnityEngine;

[ExecuteInEditMode] public class PositionHandleExample : MonoBehaviour { public Vector3 targetPosition { get { return m_TargetPosition; } set { m_TargetPosition = value; } } [SerializeField] private Vector3 m_TargetPosition = new Vector3(1f, 0f, 2f);

public virtual void Update() { transform.LookAt(m_TargetPosition); } }

将以下脚本作为 PositionHandleExampleEditor.cs 添加到 Assets/Editor,然后选择包含 PositionHandleExample 组件的对象。

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(PositionHandleExample)), CanEditMultipleObjects] public class PositionHandleExampleEditor : Editor { protected virtual void OnSceneGUI() { PositionHandleExample example = (PositionHandleExample)target;

EditorGUI.BeginChangeCheck(); Vector3 newTargetPosition = Handles.PositionHandle(example.targetPosition, Quaternion.identity); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(example, "Change Look At Target Position"); example.targetPosition = newTargetPosition; example.Update(); } } }