11 Handles
Handles
- 1: 概念:场景视图的3d GUI 控制
using System; using UnityEngine;
//https://assetstore.unity.com/packages/tools/level-design/curvy-splines-7038
namespace UnityEditor
{
[CustomEditor(typeof(HandlesScript))]
public class HandlesScriptEditor : Editor
{
HandlesScript hs;
private void OnEnable()
{
hs = target as HandlesScript;
}
public override void OnInspectorGUI()
{
hs.areaRadius = EditorGUILayout.FloatField("操作手柄的半径", hs.areaRadius);
hs.size = EditorGUILayout.FloatField("操作手柄的大小", hs.size);
//在Inspector面板上面展示数组
SerializedProperty nodePointsProperty = serializedObject.FindProperty("nodePoints");
SerializedProperty nodePointQuaternionsProperty = serializedObject.FindProperty("nodePointQuaternions");
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(nodePointsProperty, new GUIContent("位置节点"), true);
EditorGUILayout.PropertyField(nodePointQuaternionsProperty, new GUIContent("旋转节点"), true);
if (EditorGUI.EndChangeCheck())
serializedObject.ApplyModifiedProperties();
}
private void OnSceneGUI()
{
//给一个物体,添加一个文字描述
//第一个参数表示当前在场景中展示的位置
//第二个参数表示显示的名字
Handles.Label(hs.transform.position + new Vector3(0, 1, 0), "手柄");
//第一个参数:该旋转操作手柄的初始旋转角度
//第二个参数:操作手柄的显示位置,一般为物体的中心点
//第三个参数:操作手柄的半径
//多用于制作AI,用于判断和指定AI影响范围用的。
hs.areaRadius = Handles.RadiusHandle(Quaternion.identity, hs.transform.position, hs.areaRadius);
//第一个参数:可以通过Inspector面板修改值,也是该函数的返回值.
//第二个参数:操作手柄的位置
//第三个参数:操作手柄的指向
//第四个参数:操作手柄的大小
//第五个参数:操作手柄的显示方式,(箭头ArrowHandleCap,RectangleHandleCap矩形,CircleHandleCap圆形),只要是方法后缀带有Cap的都可以传入
//第六个参数:一般为0.5f,不知道干什么的
hs.size = Handles.ScaleValueHandle(hs.size, hs.transform.position, Quaternion.identity, hs.size,Handles.ArrowHandleCap, 0.5f);
for (int i = 0; i < hs.nodePoints?.Length; i++)
{
//第一个参数:该操作手柄位于世界坐标的位置
//第二个参数:该操作手柄的操作旋转方向
hs.nodePoints[i] = Handles.PositionHandle(hs.nodePoints[i], hs.nodePointQuaternions[i]);
}
for (int i = 0; i < hs.nodePointQuaternions?.Length; i++)
{
//第一个参数:该操作手柄的操作旋转方向
//第二个参数:该操作手柄位于世界坐标的位置
hs.nodePointQuaternions[i] = Handles.RotationHandle(hs.nodePointQuaternions[i], hs.nodePoints[i]);
//画线
Handles.DrawLine(hs.nodePoints[i], hs.nodePoints[(int)Mathf.Repeat(i + 1, hs.nodePoints.Length)]);
}
}
}
}
```
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1487842110@qq.com
Title:11 Handles
文章字数:543
Author:诸子百家-谁的天下?
Created At:2020-05-11, 11:41:32
Updated At:2021-03-28, 02:59:27
Url:http://yoursite.com/2020/05/11/UnityEditor/11%20Handles/Copyright: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。