Gizmos 및 Handles 클래스를 사용하면 씬(Scene) 뷰와 게임(Game) 뷰에 라인과 셰이프뿐만 아니라 인터랙티브 핸들과 컨트롤도 그릴 수 있습니다. 이 두 클래스를 함께 사용하면 이 뷰에 표시되는 내용을 확장하고 원하는 방식으로 프로젝트를 편집할 수 있는 인터랙티브 툴을 구축할 수 있습니다. 예를 들어 인스펙터에 숫자를 입력하는 대신 게임에서 논플레이어 캐릭터(NPC) 주위에 드래그 가능한 원형 반지름 기즈모를 만들 수 있습니다. 이 기즈모는 플레이어를 보거나 플레이어의 소리를 들을 수 있는 영역을 나타냅니다.
이 페이지에서는 Gizmos 및 Handles 클래스에 대한 간단한 개요를 제공합니다. Gizmos 및 Handles 클래스의 모든 구성원에 대한 전체 기술 자료와 레퍼런스는 Gizmos 및 Handles에 대한 스크립트 레퍼런스 페이지를 참조하십시오.
Gizmos 클래스를 사용하면 프로젝트를 개발하는 동안 디버깅, 설정 지원 또는 툴로 사용할 라인, 구체, 큐브, 아이콘, 텍스처, 메시를 씬 뷰에 그릴 수 있습니다.
예를 들어 게임 오브젝트 주의에 10단위 노란색 와이어 큐브를 그리려면 다음 코드를 사용할 수 있습니다.
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));
}
}
다음은 방향 광원 게임 오브젝트에 배치한 큐브의 모습입니다.
Gizmos 사용법을 설명하는 전체 기술 자료는 Gizmos 스크립트 레퍼런스 페이지를 참조하십시오.
Handles는 Gizmos와 유사하지만 상호 작용 및 조작 측면에서 더 많은 기능을 제공합니다. Unity가 씬 뷰에서 항목을 조작하기 위해 제공하는 3D 컨트롤은 Gizmos와 Handles의 조합입니다. Transform 컴포넌트를 통해 오브젝트를 배치하고, 확대/축소하고, 회전시키는 익숙한 툴과 같은 여러 빌트인 핸들 GUI가 있습니다. 하지만 커스텀 컴포넌트 에디터와 함께 사용할 고유한 핸들 GUI를 정의할 수도 있습니다. 이러한 GUI는 절차적으로 생성된 씬 콘텐츠, ‘보이지 않는’ 항목, 웨이포인트, 위치 마커와 같은 관련 오브젝트 그룹을 편집하는 데 매우 유용합니다.
예를 들어 다음은 화살표 모양 핸들을 사용하여 원호 영역을 생성하여 씬 뷰에서 ‘보호막 영역’을 수정하는 방법을 보여줍니다.
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);
}
}
Handles 사용법을 설명하는 전체 기술 자료는 Handles 스크립트 레퍼런스 페이지를 참조하십시오.