JointAngularLimitHandle
класс в UnityEditor.IMGUI.Controls
Описание
Класс составного манипулятора для редактирования многоосевых ограничений углового движения в окне Scene.
JointAngularLimitHandle в представлении Scene.
Формы, отображаемые методом DrawHandle, предполагают, что угловые пределы применяются сначала вдоль оси x, затем вдоль оси y и, наконец, вдоль оси z.
Следующий компонент определяет угловые пределы для CharacterJoint, которые будут добавлены во время выполнения.
using UnityEngine;
public class JointExample : MonoBehaviour { public float xMin { get { return m_XMin; } set { m_XMin = value; } } [SerializeField] float m_XMin = -45f;
public float xMax { get { return m_XMax; } set { m_XMax = value; } } [SerializeField] float m_XMax = 45f;
public float yMax { get { return m_YMax; } set { m_YMax = value; } } [SerializeField] float m_YMax = 45f;
public float zMax { get { return m_ZMax; } set { m_ZMax = value; } } [SerializeField] float m_ZMax = 45f;
protected virtual void Start() { var joint = gameObject.AddComponent<CharacterJoint>();
var limit = joint.lowTwistLimit; limit.limit = m_XMin; joint.lowTwistLimit = limit;
limit = joint.highTwistLimit; limit.limit = m_XMax; joint.highTwistLimit = limit;
limit = joint.swing1Limit; limit.limit = m_YMax; joint.swing1Limit = limit;
limit = joint.swing2Limit; limit.limit = m_ZMax; joint.swing2Limit = limit; } }
Следующий пример в Настраиваемом Редакторе позволяет редактировать серийные угловые пределы в представлении Scene.
using UnityEditor; using UnityEditor.IMGUI.Controls; using UnityEngine;
[CustomEditor(typeof(JointExample)), CanEditMultipleObjects] public class JointExampleEditor : Editor { JointAngularLimitHandle m_Handle = new JointAngularLimitHandle();
// the OnSceneGUI callback uses the Scene view camera for drawing handles by default protected virtual void OnSceneGUI() { var jointExample = (JointExample)target;
// copy the target object's data to the handle m_Handle.xMin = jointExample.xMin; m_Handle.xMax = jointExample.xMax;
// CharacterJoint and ConfigurableJoint implement y- and z-axes symmetrically m_Handle.yMin = -jointExample.yMax; m_Handle.yMax = jointExample.yMax;
m_Handle.zMin = -jointExample.zMax; m_Handle.zMax = jointExample.zMax;
// set the handle matrix to match the object's position/rotation with a uniform scale Matrix4x4 handleMatrix = Matrix4x4.TRS( jointExample.transform.position, jointExample.transform.rotation, Vector3.one );
EditorGUI.BeginChangeCheck();
using (new Handles.DrawingScope(handleMatrix)) { // maintain a constant screen-space size for the handle's radius based on the origin of the handle matrix m_Handle.radius = HandleUtility.GetHandleSize(Vector3.zero);
// draw the handle EditorGUI.BeginChangeCheck(); m_Handle.DrawHandle(); if (EditorGUI.EndChangeCheck()) { // record the target object before setting new values so changes can be undone/redone Undo.RecordObject(jointExample, "Change Joint Example Properties");
// copy the handle's updated data back to the target object jointExample.xMin = m_Handle.xMin; jointExample.xMax = m_Handle.xMax;
jointExample.yMax = m_Handle.yMax == jointExample.yMax ? -m_Handle.yMin : m_Handle.yMax;
jointExample.zMax = m_Handle.zMax == jointExample.zMax ? -m_Handle.zMin : m_Handle.zMax; } } } }
Свойства
| Свойство | Описание |
|---|---|
| angleHandleDrawFunction | CapFunction для использования при отображении ручки управления углом. |
| angleHandleSizeFunction | SizeFunction для указания того, насколько большой должен быть угол управления ручкой. |
| fillAlpha | Возвращает или указывает непрозрачность, используемую при отображении заполняющих фигур для диапазона движения для каждой оси. По умолчанию 0.1. |
| radius | Возвращает или указывает радиус дуги для ручки. По умолчанию 1.0. |
| wireframeAlpha | Возвращает или указывает непрозрачность, используемую для кривых линий вдоль внешней стороны дуги движения. По умолчанию 1.0. |
| xHandleColor | Возвращает или указывает цвет, используемый для ручки, ограничивающей движение вокруг оси x. По умолчанию Handles.xAxisColor. |
| xMax | Возвращает или указывает максимальное угловое движение по оси x. |
| xMin | Возвращает или указывает минимальное угловое движение по оси x. |
| xMotion | Возвращает или указывает, как ограничено угловое движение по оси x. По умолчанию ConfigurableJointMotion.Limited. |
| xRange | Возвращает или указывает диапазон допустимых значений для углового движения по оси x. По умолчанию [-180.0, 180.0]. |
| yHandleColor | Возвращает или указывает цвет, используемый для ручки, ограничивающей движение вокруг оси y. По умолчанию Handles.yAxisColor. |
| yMax | Возвращает или указывает максимальное угловое движение по оси y. |
| yMin | Возвращает или указывает минимальное угловое движение по оси y. |
| yMotion | Возвращает или указывает, как ограничено угловое движение по оси y. По умолчанию ConfigurableJointMotion.Limited. |
| yRange | Возвращает или указывает диапазон действительных значений для углового движения по оси y. По умолчанию [-180.0, 180.0]. |
| zHandleColor | Возвращает или указывает цвет, используемый для ручки, ограничивающей движение вокруг оси z. По умолчанию Handles.zAxisColor. |
| zMax | Возвращает или указывает максимальное угловое движение по оси z. |
| zMin | Возвращает или указывает минимальное угловое движение по оси z. |
| zMotion | Возвращает или указывает, как ограничено угловое движение по оси z. По умолчанию ConfigurableJointMotion.Limited. |
| zRange | Возвращает или указывает диапазон допустимых значений для углового движения по оси z. По умолчанию [-180.0, 180.0]. |
Конструкторы
| Конструктор | Описание |
|---|---|
| JointAngularLimitHandle | Создаёт новый экземпляр класса JointAngularLimitHandle. |
Открытые методы
| Метод | Описание |
|---|---|
| DrawHandle | Функция для отображения этого экземпляра в текущей камере ручки с использованием ее текущей конфигурации. |