부트캠프/본캠프

[내일배움캠프_2025JUL27] 유니티 학습

Young_A 2025. 7. 27. 18:25

목차

    유니티 학습

     

    과제를 어제 오늘 동안 더 할 수 있었으면 좋았을 텐데, 사정이 있어서 과제를 건드릴 수는 없었다.

    대신에 오늘은 정리하지 않고 넘어갔었던 TopDown_Project 중 배운 개념들을 정리하고,

    부족하다고 생각했던 부분들을 완전 체득하기 위한 학습을 해볼까한다.

     

    유니티 입문 (2D) - TopDown

    유니티 입문 (2D) - TopDown강의 듣고 정리함 GetAxisRaw() vs GetAxis()Input.GetAxis("Horizontal")은 입력값을 부드럽게 보간해서 반환한다. (0에서 1로 점점 증가)Input.GetAxisRaw("Horizontal")은 즉시 1, 0, -1 값을 보간

    j000.tistory.com

    위 게시글에 정리하지 않았던 개념들을 정리했다.


    Mathf.Atan2

    float rotZ = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;

    Atan2는 y, x값을 받아 벡터 방향의 각도를 사분면 구분하여 계산하는 함수이다.

     

    기본 개념으로 들어가면, 탄젠트부터 시작해야한다.

    탄젠트 (tan θ)는 θ 각도로부터 기울기를 구하는 공식 (tan θ의 기울기 = 높이/밑변) 이다.

     

    하지만 반대 기울기로부터 θ 각도를 구하는 공식이다.

    기울기가 크면 각도(경사)가 커지고, 작으면 각도가 작아지는 관계를 이용한다.

     

    아크탄젠트 관련함수는 2개가 있는데,

    atan(x)는 기울기 x로부터 각도만 계산한다.

    atan2(y,x)는 벡터 방향에서 각도를 계산할 수 있으므로 사분면 구분이 가능한 것이다.

     

    이렇게 짚어가며 보니, atan2(y, x)에서 왜 y가 먼저 오는 지도 이해할 수 있다.

    탄젠트의 기울기는 높이/밑변인 것을 연관지어서 그렇게 된 것 같다.

     

    또한 Mathf.Atan2 함수는 각도를 π(파이) 기호를 사용하여 라디안으로 반환한다.

    π rad는 180도이고, 90도를 표현하려면 π/2 rad 이런식으로 표현되는 것이다.

     

    그렇기 때문에 마지막에 Mathf.Rad2Deg 상수가 사용된 것이다.


    콜백 (callback)

    이 부분 애를 많이 먹어서, 코업 때 고생을 많이 했었던 기억이 난다.

    시니어의 코드를 분석하거나, 이전 버전 웹앱에서 가져와 활용했던 기억이 난다.

    스스로 생각하고 구현했던 것이 아니라, 똑같은 기능, 결과, 프로세스인 상황의 것을 가져다 쓴 것이기 때문인가, 이번 과제에 직접 구현해보면서 콜백에 대한 지식 체크를 다시 해야할 필요성을 느꼈다. 

     

    콜백은 어떤 작업이 끝난 뒤에 호출되는 함수 또는 메서드를 말한다.

    주로 비동기 처리, 이벤트 처리에서 사용되고, "나중에 사용될 함수"를 의미한다.

    콜백과 델리게이트

    나는 여기서 콜백 = 델리게이트라고 개념을 잘못 알고 있었는데,

    정확히는 델리게이트로 콜백을 구현하는 것이다.

     

    콜백은 위에서 언급했듯이 "나중에 호출할 함수"이고,

    델리게이트는 "함수 주소를 저장하고 호출하는 변수"이다.

    콜백 함수라는 개념을 델리게이트 타입의 변수를 수단으로 표현해서 전달하는 것이다.

     

    JS에서 보면, 함수 자체가 객체이므로 델리게이트 없이 콜백을 구현하기도 한다.

    제어의 역전(Inversion of Control)

    콜백의 핵심 개념 중에 제어의 역전이라는 것이 있는데,

    일반적인 프로그래밍은 내가 원하는 시점에 함수를 직접 호출한다.

    하지만

    콜백은 어떤 다른 주체가 특정 조건이 되었을 때 내 함수를 호출해주도록 맡기는 것이다.

    이때 제어권이 나에게서 다른 쪽으로 넘어간다는 의미에서 제어의 역전이라고도 한다.

    비동기 처리

    시간이 오래 걸리는 작업을 메인 프로그램 흐름을 멈추지 않고 백그라운드에서 처리하게 할 때 콜백이 유용하다.

    작업이 완료된 후에 콜백 함수가 호출되어서 결과를 처리하기 때문이다.

    이벤트 처리

    사용자 입력, 시스템 알림, 등 특정 이벤트가 발생했을 때 미리 정의된 동장을 수행하도록 연결할 때 사용됩니다.

     

    예를 들자면...

    Command 콘솔에서 Ctrl+C를 눌렀을 때 CancelKeyPress 이벤트를 호출하는 것도 콜백이 구현된 것이다.

    Ctrl+C를 계속해서 누르는지 안누르는지 확인하는 것이 아니라, 해당 키 조합이 눌리는 이벤트가 발생하면 등록된 콜백 함수가 실행되는 것이다.

     

    또 다른 예로는, 배달 앱 알림 같은 게 있다.

    일단 주문을 하고 나면, 앱을 계속 보고 있지 않아도 된다.

    주문 상태가 변경되거나, 새로운 업데이트가 생기면 오는 푸시 알림이 콜백의 개념이다.

    미리 알림을 받겠다고 설정해두었으니, 특정 조건이 충족되었을 때 배달앱에서 콜백을 해주는 것이다.

     

    일단 이렇게 정리를 하고, 실사용은 과제 등을 하면서 깨달아봐야 할 것 같다.

     


    Action과 UnityAction

    지난번에 과제를 하다가 Scene 관련 진행을 할 때, Action이 아니라 UnityAction을 쓰라는 신택스 에러가 떴었다.

     

    찾아보니 Action은 System.Action으로 C# 기본 제공 델리게이트 타입이다.

    반면에 UnityAction은 UnityEngine.Events.UnityAction으로 Unity에서 제공하는 델리게이트 타입이다.

     

    차이점은 다음과 같다.

    구분 Action UnityAction
    네임스페이스 System UnityEngine.Events
    용도 일반 C# 델리게이트 Unity 이벤트 시스템에서 주로 사용
    시리얼라이즈 지원 없음 Unity 이벤트와 연동 가능 (인스펙터 노출 가능)
    성능 극한 성능 상황에서 약간 더 빠름 일반적으로는 거의 차이 없다.

     

    즉, 유니티 이벤트 시스템과 연동되는 경우 UnityAction을 사용하는 것이 맞다.

     


    느낀점

    수학 관련 내용들은 강의를 듣던 뭐를 읽던 이해가 잘 안되어서 생성형 AI와 질의응답형으로 진행했다.

    (맞는 말을 한다는 가정 하에) 개인 과외 선생님처럼 이해될 때까지 질문할 수 있다는 점이 좋았다.

    다만, 확실성을 보완하기 위해서 2종류의 생성형 AI에게 TIL 작성한 것을 검토해달라고 부탁하는 방식으로 검증하려 했다.


    내일 학습 할 것은 무엇인지

    내일은 출석하자마자 과제 필수과제를 끝내야한다!

    다른건 다 끝낸 것 같은데, 성공/실패 여부 따라 메시지 표시하는 부분이 이해가 잘 안간다.

    미니게임 성공/실패 여부가 없는데...

     

    내 게임에서는 생명수를 마시면 캐릭터가 하늘을 부유하는 FlappyPlane 게임 씬으로 이동한다.

    베르나르베르베르의 타나토노트의 여행자들처럼 저승 탐험하는 느낌이라고 생각하고 있다.

    그렇게 따지자면 당신은 nn만큼의 다른 세상을 탐험하고 왔다~ 이런 식으로 하면 되려나?