요약
Collision을 통한 맵에 생성된 오브젝트 확인에서 사용한 방법으로 오브젝트를 계속 추적하는 것은 컴퓨터 자원을 낭비하는 행위로 판단하였다. 이를 위해 오브젝트가 직접 움직일 때마다 오브젝트 데이터가 담긴 배열 Map2D을 업데이트를 하는 방식을 이용하였다.
하지만 직접적으로 코드에 데이터를 넣는 방식은 게임을 테스트할 때 배열 Map2D가 잘못된 정보를 가지고 있는 경우가 발생하였다. 이를 위해 배열 Map2D 시각화하여 잘못된 부분을 빠르게 판단하여 수정할 수 있도록 하였다.
배열 Map2D 만들기
배열을 통해 오브젝트를 추적하는 것은 Map 클래스를 구현하기보다는 간단한 일이다. 다만 문제점은 스크립트에 항상 배열 Map2D를 생각하면서 작성해야 하므로 다른 스크립트는 복잡해질 것이다. 이를 조금이나마 방지하기 위해 MapObject를 열거형으로 두고 활용하는 방법을 사용하였다.
GameManager.cs
public class GameManager : MonoBehaviour
{
public enum MapObject
{
noting,
wall,
player,
moster
}
public int MapSizeX { get; set; } = 12;
public int MapSizeY { get; set; } = 12;
public int[,] Map2D { get; set; }
... 생략 ...
private void Awake()
{
... 생략 ...
// 맵에 대한 정보를 갱신
Map2D = new int[MapSizeX, MapSizeY];
for (int i = 0; i < MapSizeX * MapSizeY; i++)
{
Map2D[i / MapSizeY, i % MapSizeY] = (int)MapObject.noting;
}
... 생략 ...
}
... 생략 ...
}
Map2D 시각화
배열을 통해 오브젝트를 추적하다 보면 이상하게 동작하는 경우가 발생한다. 이러면 보통 배열 Map2D에 문제가 발생하는 경우가 대다수이다. 하지만 이를 확인하는 방법이 Debug.Log만으로는 확인하기 어렵기에 시각화를 통해 확인할 수 있다.

Array.cs
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class Array : MonoBehaviour
{
public int[,] array;
public int sizeX;
public int sizeY;
void Start()
{
if (GameManager.Instance != null)
{
array = GameManager.Instance.Map2D;
sizeX = GameManager.Instance.MapSizeX;
sizeY = GameManager.Instance.MapSizeY;
}
}
}
#if UNITY_EDITOR
[CustomEditor(typeof(Array))]
public class ArrayEditor : Editor
{
Array arrayComponent;
void OnEnable()
{
arrayComponent = (Array)target;
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (arrayComponent.array == null) return;
EditorGUILayout.LabelField("2차원 배열");
for (int y = arrayComponent.sizeY - 1; y >= 0; y--)
{
EditorGUILayout.BeginHorizontal();
for (int x = 0; x < arrayComponent.sizeX; x++)
{
arrayComponent.array[x, y] = EditorGUILayout.IntField(arrayComponent.array[x, y]);
}
EditorGUILayout.EndHorizontal();
}
if (GUI.changed)
{
EditorUtility.SetDirty(arrayComponent);
}
}
}
#endif
코드에 독특한 점이라면 #if UNITY_EDITOR와 같이 전처리문이 들어갔다는것이다. 이는 게임을 빌드할때 Editor는 빌드가 안되기 때문에 추가한 것이다.
'Unity > 로봇 체스 개발 일지' 카테고리의 다른 글
| [문서] 게임 기획서 (0) | 2025.01.09 |
|---|---|
| [Unity] 게임 규칙 설정 : GameManager (0) | 2025.01.09 |
| [Unity] 로봇 움직임 구현(1) : A* 알고리즘 (0) | 2025.01.09 |
| [Unity] 오브젝트 풀링과 팩토리 패턴 : PoolManager (0) | 2025.01.03 |
| [Unity] 게임 개발을 위한 URP와 HDRP의 고려 사항 (0) | 2024.10.09 |