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, 퀘스트 등)을 깔끔하고 확장성 있게 만들 수 있다.
  • 성능이나 코드 유지보수에도 큰 영향을 준다.