커스텀 기즈모를 활용하는 방법을 간단히 알아보자.
웨이포인트 스크립트 활용하여 기즈모를 그리는 코드를 추가해보자.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaypointPath : MonoBehaviour
{
public Transform GetWaypoint(int waypointIndex)
{
return transform.GetChild(waypointIndex);
}
public int GetNextWaypointIndex(int currentWaypointIndex)
{
int nextWaypointIndex = currentWaypointIndex + 1;
if(nextWaypointIndex == transform.childCount)
{
nextWaypointIndex = 0;
}
return nextWaypointIndex;
}
private void OnDrawGizmos()
{
for (int waypoinIndex = 0; waypoinIndex < transform.childCount; waypoinIndex++)
{
// 웨이포인트 지점에 원 그리기
var waypoint = GetWaypoint(waypoinIndex);
Gizmos.color = Color.cyan;
Gizmos.DrawSphere(waypoint.position, 0.2f);
// 다음 웨이포인트까지 선그리기
int nextWaypointIndex = GetNextWaypointIndex(waypoinIndex);
var nextWaypoint = GetWaypoint(nextWaypointIndex);
Gizmos.color = Color.yellow;
Gizmos.DrawLine(waypoint.position, nextWaypoint.position);
}
}
}

웨이포인트 오브젝트의 부모, 자식 오브젝트를 클릭했을 때만 기즈모가 나오도록 수정해보자.
// 네임스페이스 추가
using System.Linq;
using UnityEditor;
// 수정
private void OnDrawGizmos()
{
if (IsWaypointSelected())
{
for (int waypoinIndex = 0; waypoinIndex < transform.childCount; waypoinIndex++)
{
// 웨이포인트 지점에 원 그리기
var waypoint = GetWaypoint(waypoinIndex);
Gizmos.color = Color.cyan;
Gizmos.DrawSphere(waypoint.position, 0.2f);
// 다음 웨이포인트까지 선그리기
int nextWaypointIndex = GetNextWaypointIndex(waypoinIndex);
var nextWaypoint = GetWaypoint(nextWaypointIndex);
Gizmos.color = Color.yellow;
Gizmos.DrawLine(waypoint.position, nextWaypoint.position);
}
}
}
private bool IsWaypointSelected()
{
// 현재 오브젝트를 선택했는지
if (Selection.transforms.Contains(transform))
{
return true;
}
// 현재 오브젝트의 자식 오브젝트가 선택되었는지
foreach (Transform child in transform)
{
if (Selection.transforms.Contains(child))
{
return true;
}
}
return false;
}
실제로 움직이는 플랫폼 오브젝트를 선택했을 때도 웨이포인트 기즈모가 출력되도록 수정해보자.
WaypointPath 스크립트 수정
private void OnDrawGizmos()
{
if (IsWaypointSelected())
{
DrawWaypointGizmo();
}
}
public void DrawWaypointGizmo()
{
for (int waypoinIndex = 0; waypoinIndex < transform.childCount; waypoinIndex++)
{
// 웨이포인트 지점에 원 그리기
var waypoint = GetWaypoint(waypoinIndex);
Gizmos.color = Color.cyan;
Gizmos.DrawSphere(waypoint.position, 0.2f);
// 다음 웨이포인트까지 선그리기
int nextWaypointIndex = GetNextWaypointIndex(waypoinIndex);
var nextWaypoint = GetWaypoint(nextWaypointIndex);
Gizmos.color = Color.yellow;
Gizmos.DrawLine(waypoint.position, nextWaypoint.position);
}
}
실제 오브젝트를 조작하는 스크립트 수정
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovingPlatform : MonoBehaviour
{
public WaypointPath waypointPath;
private void OnDrawGizmosSelected()
{
waypointPath.DrawWaypointGizmo();
}
}