Unity
[TIL] Unity 게임 개발에 사용되는 자료구조
unihee1
2025. 4. 18. 20:24
1. List<T> / Array
동일한 종류의 데이터를 순차적으로 저장하고 반복 처리할 때 쓰인다.
public List<Item> inventory = new List<Item>();
void AddItem(Item newItem) {
inventory.Add(newItem);
}
void ShowAllItems() {
foreach (Item item in inventory) {
Debug.Log(item.name);
}
}
- 아이템 추가, 삭제, 탐색이 간단하다.
- foreach 루프로 한 번에 처리할 수 있다.
2. Dictionary<TKey, TValue>
어떤 키로 빠르게 값을 찾아야 할 때 쓰인다.
Dictionary<int, SkillData> skillTable = new Dictionary<int, SkillData>();
void UseSkill(int skillId) {
if (skillTable.ContainsKey(skillId)) {
SkillData skill = skillTable[skillId];
skill.Activate();
}
}
- 키로 빠르게 접근이 가능하다.
- 조건 분기 없이 함수,데이터를 바로 찾을 수 있다.
3. Queue<T> (선입선출)
순서대로 처리해야 할 작업이 있을 때
Queue<string> dialogueQueue = new Queue<string>();
void LoadDialogue(List<string> lines) {
foreach (var line in lines)
dialogueQueue.Enqueue(line);
}
void ShowNextDialogue() {
if (dialogueQueue.Count > 0)
Debug.Log(dialogueQueue.Dequeue());
}
- "줄 서기" 같은 순서처리에 딱 좋음
- 순차적으로 처리되므로 실수하기 쉬운 인덱스 관리가 필요 없음
4. Stack<T> (후입선출)
되돌리기(Undo), 상태 복원 등에 사용한다.
Stack<UIPage> uiHistory = new Stack<UIPage>();
void OpenPage(UIPage newPage) {
uiHistory.Push(currentPage);
currentPage = newPage;
}
void Back() {
if (uiHistory.Count > 0) {
currentPage = uiHistory.Pop();
}
}
- 최근 페이지부터 하나씩 되돌리는게 가능하다.
- 복잡한 UI 전환 흐름을 깔끔하게 정리할 수 있다.
5. 그래프 (노드 + 연결 정보)
길 찾기, 퀘스트 진행 관계, 맵 연결 등에서 사용된다.
class Node {
public Vector3 position;
public List<Node> neighbors;
}
- 노드 간의 연결 정보를 토대로 경로를 탐색한다.
- Unity에선 A* Pathfinding Project 플러그인으로 자주 사용된다.
- 현실적인 맵,이동 구조 표현이 가능하다.
- A*, Dijkstra 같은 알고리즘 적용에 필수이다.
6. 트리 구조
계층 구조나 선택지 분기에서 사용한다.
class DialogueNode {
public string dialogueText;
public List<DialogueNode> options;
}
- 트리 구조는 선택 -> 분기 -> 하위 선택 같은 흐름 표현에 적합하다.
- 복잡한 대화 시스템을 구현할 수 있다.
7. 결론
자료구조를 사용하면
- 복잡한 시스템(인벤토리, FSM, AI, 퀘스트 등)을 깔끔하고 확장성 있게 만들 수 있다.
- 성능이나 코드 유지보수에도 큰 영향을 준다.