Unity 6.3
0 онлайн 69 гостей 3 в системе
Вход

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Возвращает или указывает цвет угловой ручки управления.
angleHandleDrawFunctionCapFunction для использования при отображении ручки управления углом.
angleHandleSizeFunctionSizeFunction для указания того, насколько большой должен быть угол управления ручкой.
fillColorВозвращает или указывает цвет формы дуги.
radiusВозвращает или указывает радиус дуги для ручки.
radiusHandleColorВозвращает или указывает цвет ручки радиуса.
radiusHandleDrawFunctionCapFunction для использования при отображении кнопки управления радиусом.
radiusHandleSizeFunctionSizeFunction для указания того, насколько большой должен быть угол управления ручкой.
wireframeColorВозвращает или указывает цвет кривой линии вдоль внешней стороны дуги.

Конструкторы

Конструктор Описание
ArcHandleСоздаёт новый экземпляр класса ArcHandle.

Открытые методы

Метод Описание
DrawHandleФункция для отображения этого экземпляра в текущей камере ручки с использованием ее текущей конфигурации.
SetColorWithoutRadiusHandleУстанавливает angleHandleColor, wireframeColor и fillColor на одно и то же значение, где fillColor будет иметь указанное значение альфы. radiusHandleColor будет установлено на Color.clear, а ручка радиуса будет отключена.
SetColorWithRadiusHandleУстанавливает для angleHandleColor, radiusHandleColor, wireframeColor и fillColor одно и то же значение, где fillColor будет иметь указанное значение альфы.

Статические методы

Метод Описание
DefaultAngleHandleDrawFunctionCapFunction, который рисует линию, заканчивающуюся Handles.CylinderHandleCap.
DefaultAngleHandleSizeFunctionSizeFunction, который возвращает фиксированный размер экрана.
DefaultRadiusHandleSizeFunctionSizeFunction, который возвращает фиксированный размер экрана.