74.내일배움캠프 66일차 TIL <Unity Unity 2D 팀프로젝트- MartialGod:Reborn - 15일차> 07/11

정광훈(Unity_9기)·2025년 7월 11일

TIL (Today I Learned)

목록 보기
75/110
post-thumbnail

Stack

함수 호출 스택 (Call Stack):

유니티 스크립트에서 C# 코드를 실행할 때,
모든 함수 호출은 내부적으로 콜 스택(Call Stack)에 쌓임.

한 함수가 다른 함수를 호출하면, 호출된 함수의 정보가 스택에 푸시되고,
함수 실행이 끝나면 스택에서 팝 시킴.

예시:
Update() 함수 안에서 MovePlayer() 함수를 호출하고,
MovePlayer() 안에서 CheckBounds() 함수를 호출했다면,
콜 스택에는 Update → MovePlayer → CheckBounds 순으로 쌓이고,
CheckBounds가 끝나면 팝, MovePlayer가 끝나면 팝, 이런 식으로 동작.

디버깅:
유니티 에디터의 콘솔(Console) 창에서 에러 메시지를 볼 때,
스택 트레이스(Stack Trace)를 제공하는데,
이는 에러가 발생하기까지의 함수 호출 순서를 보여주는 것으로 콜 스택의 내용을 나타냄.

UI 관리 (Screen/Panel Stack):

복잡한 UI를 구성할 때, 여러 개의 UI 패널이나 화면을
순서대로 보여주고 숨기는 방식으로 스택 개념을 적용 가능.

예를 들어, 게임 내 메뉴 시스템에서
'일시정지 메뉴' → '설정 메뉴' → '오디오 설정 메뉴' 순으로 진입했다고 가정.

새로운 메뉴를 열 때마다 현재 메뉴를 비활성화하고 새로운 메뉴를 활성화하면서,
이전에 활성화되어 있던 메뉴를 스택에 푸시하는 방식으로 관리할 수 있음.

'뒤로 가기' 버튼을 누르면 스택의 맨 위에 있는 메뉴를 팝하여 닫고,
이전에 활성화되어 있던 메뉴를 다시 활성화하는 식으로 구현.

후입선출(LIFO) 방식의 스택 자료 구조 개념은 유니티 프로젝트를 개발하고 디버깅하며
다양한 기능을 구현하는 데 있어서 기본적인 프로그래밍 원리로 중요하게 활용


<예시 코드>

// 유니티 스크립트 예시 (개념만)
using System.Collections.Generic;
using UnityEngine;

public class MyGameManager : MonoBehaviour
{
    // 게임에서 발생한 특정 이벤트 기록
    private Stack<string> eventHistory = new Stack<string>();

    void Start()
    {
        RecordEvent("Game Started");
        RecordEvent("Player Entered Zone A");
    }

    public void RecordEvent(string eventName)
    {
        eventHistory.Push(eventName);
        Debug.Log($"Event Recorded: {eventName}, Current Stack Top: {eventHistory.Peek()}");
    }

    public void UndoLastEvent()
    {
        if (eventHistory.Count > 0)
        {
            string lastEvent = eventHistory.Pop();
            Debug.Log($"Undoing Last Event: {lastEvent}, Remaining events: {eventHistory.Count}");
            // 실제 게임 로직에서 lastEvent에 해당하는 행동을 되돌리는 코드 추가
        }
        else
        {
            Debug.Log("No events to undo.");
        }
    }
}

디버그 로그 출력

Event Recorded: Game Started, Current Stack Top: Game Started
Event Recorded: Player Entered Zone A, Current Stack Top: Player Entered Zone A

0개의 댓글