Unity 6.3
0 онлайн 77 гостей 3 в системе
Вход

Программирование с гаджетами и ручками

Классы 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:

Свет GameObject с дополнительным скриптом, который рисует кубический гаджета вокруг его положения
Свет 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.

Дополнительные ресурсы