版本: Unity 6 (6000.0)
语言English
  • C#

Handles.Slider2D

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每个建议更改,并在适当时进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static Vector3 Slider2D(int id, Vector3 handlePos, Vector3 offset, Vector3 handleDir, Vector3 slideDir1, Vector3 slideDir2, float handleSize, Handles.CapFunction capFunction, Vector2 snap, bool drawHelper = false);

声明

public static Vector3 Slider2D(Vector3 handlePos, Vector3 handleDir, Vector3 slideDir1, Vector3 slideDir2, float handleSize, Handles.CapFunction capFunction, float snap, bool drawHelper = false);

声明

public static Vector3 Slider2D(int id, Vector3 handlePos, Vector3 handleDir, Vector3 slideDir1, Vector3 slideDir2, float handleSize, Handles.CapFunction capFunction, Vector2 snap, bool drawHelper = false);

声明

public static Vector3 Slider2D(Vector3 handlePos, Vector3 handleDir, Vector3 slideDir1, Vector3 slideDir2, float handleSize, Handles.CapFunction capFunction, Vector2 snap, bool drawHelper = false);

参数

id (可选) 覆盖此 Slider2D 实例的默认 ControlID。
handlePos 当前点在 Handles.matrix 空间中的位置。
offset (可选) 在 handlePos 处渲染 Slider2D,但将 Slider2D 的原点视为 handlePos + offset。对于相对于其他对象或句柄放置/渲染的 Slider2D 实例很有用。
handleDir 句柄在 Handles.matrix 空间中的方向,仅用于句柄的渲染。
slideDir1 滑块运动平面在 Handles.matrix 空间中的第一个轴。
slideDir2 滑块运动平面在 Handles.matrix 空间中的第二个轴。
handleSize 句柄在 Handles.matrix 空间中的大小。如果您想要恒定的屏幕空间大小,请使用 HandleUtility.GetHandleSize
snap (float 或 Vector2) 沿两个轴的捕捉增量,可以是统一的或每个轴的。请参阅 Handles.SnapValue
drawHelper (默认值: false) 拖动时在句柄周围渲染一个矩形。
capFunction 用于执行实际绘制的函数。

返回值

Vector3 用户与句柄交互修改后的新值。如果用户没有移动句柄,它将返回传递给函数的位置值。

描述

创建一个沿两个轴定义的平面移动的 3D 滑块。

此方法将在屏幕上绘制一个 3D 可拖动的句柄。句柄被限制在沿 3D 空间中的平面滑动。


场景视图中的 2D 滑块句柄。

将以下脚本添加到您的 Assets 文件夹中作为 Slider2DExample.cs,并将 Slider2DExample 组件添加到场景中的某个对象。

using UnityEngine;

[ExecuteInEditMode] public class Slider2DExample : 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); } }

将以下脚本添加到 Assets/Editor 中作为 Slider2DExampleEditor.cs,并选择具有 Slider2DExample 组件的对象。

using UnityEditor;
using UnityEngine;

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

float size = HandleUtility.GetHandleSize(example.targetPosition) * 0.5f; float snap = 0.1f; Vector3 handleDirection = Vector3.up;

EditorGUI.BeginChangeCheck(); Vector3 newTargetPosition = Handles.Slider2D(example.targetPosition, handleDirection, Vector3.right, Vector3.forward, size, Handles.CircleHandleCap, snap); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(example, "Change Look At Target Position"); example.targetPosition = newTargetPosition; example.Update(); } } }