Описание
Класс составной ручки для редактирования пределов многоосевого углового движения в представлении "Сцена".

Фигуры, отображаемые с помощью метода DrawHandle, предполагают, что угловые ограничения применяются сначала по оси x, затем по оси y и, наконец, по оси 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;
}
}
Следующий пример пользовательского редактора позволяет редактировать сериализованные угловые ограничения в представлении «Сцена».
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 | Функция для отображения этого экземпляра в текущей камере дескриптора с использованием его текущей конфигурации. |