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

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; } } } }

Свойства

Свойство Описание
angleHandleDrawFunctionCapFunction для использования при отображении ручки управления углом.
angleHandleSizeFunctionSizeFunction для указания того, насколько большой должен быть угол управления ручкой.
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Функция для отображения этого экземпляра в текущей камере ручки с использованием ее текущей конфигурации.