版本: Unity 6 (6000.0)
语言英语
  • C#

JointAngularLimitHandle

UnityEditor.IMGUI.Controls 中的类

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提供的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

用于在场景视图中编辑多轴角运动限制的复合句柄的类。

场景视图中的 JointAngularLimitHandle。

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

以下自定义编辑器示例允许您在场景视图中编辑序列化角限制。

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一个函数,使用其当前配置在当前句柄相机中显示此实例。