Программирование с гаджетами и ручками
Классы Gizmos и Handles позволяют вам рисовать линии и фигуры в представлениях Scene и Game, а также интерактивные ручки и элементы управления. Эти два класса вместе дают вам возможность расширить то, что показано в этих представлениях, и создать интерактивные инструменты для редактирования проекта любым способом, который вам нравится.
Например, вместо того, чтобы вводить числа в Inspector, вы можете создать перетаскиваемый гаджета радиуса круга вокруг неигрового персонажа в игре, который представляет собой область, в которой они могут услышать или увидеть игрока.
Гизмос
Gizmos класс позволяет рисовать в окне Scene линии, сферы, кубы, значки, текстуры и меши — как средство отладки, вспомогательной разметки или инструментов при разработке проекта.
Следующий пример рисует 10 единиц желтый куб провода вокруг GameObject:
using UnityEngine;
public class GizmosExample : MonoBehaviour
{
void OnDrawGizmosSelected()
{
// Draw a yellow cube at the transform position
Gizmos.color = Color.yellow;
Gizmos.DrawWireCube(transform.position, new Vector3(10, 10, 10));
}
}
На следующем рисунке показано, как этот куб выглядит, когда он помещается на направленный свет GameObject:
Для полной справки по API, включая примеры использования, см. страницу справки по API для Gizmos.
Ручки
Ручки похожи на гаджеты, но обеспечивают больше интерактивности и манипулирования. По умолчанию 3D элементы управления, которые Unity предоставляет для манипулирования элементами в представлении Scene, являются комбинацией гаджетов и ручек. Существует ряд встроенных ручек GUIs, таких как знакомые инструменты для позиционирования, масштабирования и вращения объекта через компонент Transform.
Вы можете определить свой собственный handle GUIs для использования с пользовательскими редакторами компонентов. Такой GUIs может быть очень полезным способом редактирования процедурно генерируемого Scene содержимого, «невидимых» элементов и групп связанных объектов, таких как точки маршрута и маркеры местоположения.
В следующем примере создается область дуги с ручкой стрелки, позволяющая изменить «область щита» в представлении Scene:
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);
}
}
Для полной справки по API, включая примеры использования, см. страницу справки по API для Handles.