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

Handles.DrawWireArc

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每一项更改建议,并在适用时进行更新。

关闭

提交失败

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

关闭

取消

声明

public static void DrawWireArc(Vector3 center, Vector3 normal, Vector3 from, float angle, float radius, float thickness = 0.0f);

参数

center 圆在世界空间中的中心。
normal 圆在世界空间中的法线。
from 圆周上一点相对于圆心的方向,弧线从此点开始。
angle 弧线的角度,以度为单位。
radius 圆在世界空间中的半径。
thickness 线条粗细,以UI点为单位(零粗细绘制单像素线条)。

描述

在3D空间中绘制圆弧。

Handles.colorHandles.matrix 属性可以对弧线颜色进行着色并对其位置进行额外变换。当当前GUI事件类型不是 Repaint 时,Unity 会忽略 DrawWireArc(即,不会发生任何事情)。


场景视图中的线框弧线。

using UnityEditor;
using UnityEngine;
using System.Collections;

//this class should exist somewhere in your project public class WireArcExample : MonoBehaviour { public float shieldArea; }

// Create a 180 degrees wire arc with a ScaleValueHandle attached to the disc // that lets you modify the "shieldArea" value in the WireArcExample [CustomEditor(typeof(WireArcExample))] public class DrawWireArc : Editor { void OnSceneGUI() { Handles.color = Color.red; WireArcExample myObj = (WireArcExample)target; Handles.DrawWireArc(myObj.transform.position, myObj.transform.up, -myObj.transform.right, 180, myObj.shieldArea); myObj.shieldArea = (float)Handles.ScaleValueHandle(myObj.shieldArea, myObj.transform.position + myObj.transform.forward * myObj.shieldArea, myObj.transform.rotation, 1, Handles.ConeHandleCap, 1); } }

您可以使用 HandleUtility.GetHandleSize 计算操纵器手柄的合适尺寸。

弧线 thickness 可以选择性地设置。零粗细绘制一条像素线条。较大的粗细值表示线条粗细,以UI点为单位。例如,如果显示缩放比例为200%,则粗细为1.0的线条在屏幕上可能宽两个像素(参见 EditorGUIUtility.pixelsPerPoint)。


不同粗细的弧线。

using UnityEngine;
using UnityEditor;

public class ExampleScript : MonoBehaviour { }

// Display arcs of various angles and thickness in the scene view [CustomEditor(typeof(ExampleScript))] public class ExampleEditor : Editor { public void OnSceneGUI() { var t = target as ExampleScript; var tr = t.transform; var position = tr.position; Handles.color = Color.yellow; for (int i = 0; i < 10; ++i) { var center = position; var start = Vector3.left; var normal = Vector3.forward; var radius = 3 - i * 0.3f; var angle = 40 + 30 * i; Handles.DrawWireArc(center, normal, start, angle, radius, i); } } }