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

ArcHandle

UnityEditor.IMGUI.Controls 中的类

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

描述

一个用于组合手柄的类,用于在场景视图中编辑角度和半径。

场景视图中的 ArcHandle。

此类允许您显示用于编辑圆弧的角度和半径的控制手柄。圆弧起源于 Vector3.forward 乘以 半径,并围绕 Vector3.up 旋转。此类 DrawHandle 方法渲染的手柄受 Handles 类中的全局状态影响,例如 Handles.matrixHandles.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); } }

以下自定义编辑器示例允许您在场景视图中编辑此组件的高程角和力属性,其中力由手柄的半径表示。

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.OnSceneGUIHandles.SetCamera

属性

angle返回或指定手柄圆弧的角度。
angleHandleColor返回或指定角度控制手柄的颜色。
angleHandleDrawFunction显示角度控制手柄时使用的 CapFunction。
angleHandleSizeFunctionSizeFunction,用于指定角度控制手柄的大小。
fillColor返回或指定圆弧形状的颜色。
radius返回或指定手柄圆弧的半径。
radiusHandleColor返回或指定半径控制手柄的颜色。
radiusHandleDrawFunction显示半径控制手柄时使用的 CapFunction。
radiusHandleSizeFunctionSizeFunction,用于指定角度控制手柄的大小。
wireframeColor返回或指定圆弧外部曲线线的颜色。

构造函数

ArcHandle创建 ArcHandle 类的新的实例。

公共方法

DrawHandle一个函数,用于使用其当前配置在当前手柄相机中显示此实例。
SetColorWithoutRadiusHandle将 angleHandleColor、wireframeColor 和 fillColor 设置为相同的值,其中 fillColor 将具有指定的 alpha 值。radiusHandleColor 将设置为 Color.clear,并且半径手柄将被禁用。
SetColorWithRadiusHandle将 angleHandleColor、radiusHandleColor、wireframeColor 和 fillColor 设置为相同的值,其中 fillColor 将具有指定的 alpha 值。

静态方法

DefaultAngleHandleDrawFunction一个 CapFunction,它绘制一条以 Handles.CylinderHandleCap 结束的线。
DefaultAngleHandleSizeFunction一个 SizeFunction,它返回一个固定的屏幕空间大小。
DefaultRadiusHandleSizeFunction一个 SizeFunction,它返回一个固定的屏幕空间大小。