ArcHandle
класс в UnityEditor.IMGUI.Controls
Описание
Класс составного манипулятора для редактирования угла и радиуса в окне Scene.
ArcHandle в представлении Scene.
Этот класс позволяет отобразить манипуляторы для изменения угла и радиуса дуги. Дуга начинается в Vector3.forward умноженное на radius и вращается вокруг Vector3.up. Манипулятор, отрисовываемый методом этого класса DrawHandle метод зависит от глобального состояния в Handles класс, такой как Handles.matrix и Handles.color.
Следующий компонент определяет объект со свойствами угла и силы.
using UnityEngine;
public class ProjectileExample : MonoBehaviour { public float elevationAngle { get { return m_ElevationAngle; } set { m_ElevationAngle = value; } } [SerializeField] float m_ElevationAngle = 45f;
public float impulse { get { return m_Impulse; } set { m_Impulse = value; } } [SerializeField] float m_Impulse = 20f;
public Vector3 facingDirection { get { Vector3 result = transform.forward; result.y = 0f; return result.sqrMagnitude == 0f ? Vector3.forward : result.normalized; } }
protected virtual void Start() { GameObject ball = GameObject.CreatePrimitive(PrimitiveType.Sphere);
Vector3 direction = facingDirection; direction = Quaternion.AngleAxis(elevationAngle, Vector3.Cross(direction, Vector3.up)) * direction; ball.AddComponent<Rigidbody>().AddForce(direction * impulse, ForceMode.Impulse); } }
Следующий пример в Настраиваемом Редакторе позволяет изменить свойства угла возвышения и силы для этого компонента в представлении Scene, где сила представлена радиусом ручки.
using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEngine;
[CustomEditor(typeof(ProjectileExample))] public class ProjectileExampleEditor : Editor { ArcHandle m_ArcHandle = new ArcHandle();
protected virtual void OnEnable() { // arc handle has no radius handle by default m_ArcHandle.SetColorWithRadiusHandle(Color.white, 0.1f); }
// the OnSceneGUI callback uses the Scene view camera for drawing handles by default protected virtual void OnSceneGUI() { ProjectileExample projectileExample = (ProjectileExample)target;
// copy the target object's data to the handle m_ArcHandle.angle = projectileExample.elevationAngle; m_ArcHandle.radius = projectileExample.impulse;
// set the handle matrix so that angle extends upward from target's facing direction along ground Vector3 handleDirection = projectileExample.facingDirection; Vector3 handleNormal = Vector3.Cross(handleDirection, Vector3.up); Matrix4x4 handleMatrix = Matrix4x4.TRS( projectileExample.transform.position, Quaternion.LookRotation(handleDirection, handleNormal), Vector3.one );
using (new Handles.DrawingScope(handleMatrix)) { // draw the handle EditorGUI.BeginChangeCheck(); m_ArcHandle.DrawHandle(); if (EditorGUI.EndChangeCheck()) { // record the target object before setting new values so changes can be undone/redone Undo.RecordObject(projectileExample, "Change Projectile Properties");
// copy the handle's updated data back to the target object projectileExample.elevationAngle = m_ArcHandle.angle; projectileExample.impulse = m_ArcHandle.radius; } } } }
Дополнительные ресурсы: ,Editor.OnSceneGUI,, ,Handles.SetCamera,.
Свойства
| Свойство | Описание |
|---|---|
| angle | Возвращает или указывает угол дуги для ручки. |
| angleHandleColor | Возвращает или указывает цвет угловой ручки управления. |
| angleHandleDrawFunction | CapFunction для использования при отображении ручки управления углом. |
| angleHandleSizeFunction | SizeFunction для указания того, насколько большой должен быть угол управления ручкой. |
| fillColor | Возвращает или указывает цвет формы дуги. |
| radius | Возвращает или указывает радиус дуги для ручки. |
| radiusHandleColor | Возвращает или указывает цвет ручки радиуса. |
| radiusHandleDrawFunction | CapFunction для использования при отображении кнопки управления радиусом. |
| radiusHandleSizeFunction | SizeFunction для указания того, насколько большой должен быть угол управления ручкой. |
| wireframeColor | Возвращает или указывает цвет кривой линии вдоль внешней стороны дуги. |
Конструкторы
| Конструктор | Описание |
|---|---|
| ArcHandle | Создаёт новый экземпляр класса ArcHandle. |
Открытые методы
| Метод | Описание |
|---|---|
| DrawHandle | Функция для отображения этого экземпляра в текущей камере ручки с использованием ее текущей конфигурации. |
| SetColorWithoutRadiusHandle | Устанавливает angleHandleColor, wireframeColor и fillColor на одно и то же значение, где fillColor будет иметь указанное значение альфы. radiusHandleColor будет установлено на Color.clear, а ручка радиуса будет отключена. |
| SetColorWithRadiusHandle | Устанавливает для angleHandleColor, radiusHandleColor, wireframeColor и fillColor одно и то же значение, где fillColor будет иметь указанное значение альфы. |
Статические методы
| Метод | Описание |
|---|---|
| DefaultAngleHandleDrawFunction | CapFunction, который рисует линию, заканчивающуюся Handles.CylinderHandleCap. |
| DefaultAngleHandleSizeFunction | SizeFunction, который возвращает фиксированный размер экрана. |
| DefaultRadiusHandleSizeFunction | SizeFunction, который возвращает фиксированный размер экрана. |