부트캠프/본캠프

[내일배움캠프_2025JUL24] 유니티 학습, 분반 OT, 개인과제

Young_A 2025. 7. 24. 21:15

목차

    오늘의 학습 키워드

     

     

    유니티 학습 오늘 하루는 한줄씩 주석 분석 하는 게 아니라 일단 납득만 하고 지나가는 식으로 했다.

    분반 OT 전에 끝낼 수 있었고, OT가 끝난 뒤에는 개인 필수 과제들만 분석 해보고 저녁 먹은 뒤부터 본격적으로 시작했다. 

     

    이하 접근 글은 오티 메모한 것들

    더보기

    지금 개인과제를 하는 시점에서는 구조, 설계보다는 구현을 통한 복습에 초점을 맞추는 것이 맞다.

    팀 프로젝트 할 때도, 구조를 고민하는 것은 좋지만 너무 시간이 지연되지 않도록 해야 프로젝트를 빨리 시작할 수 있다.

     

    게임수학, 쉐이더 등을 다루지 않을 것이다. 참고자료 추천이나, 개념만 잡고 갈 것.

    이미 다른 것 소화하기에도 시간은 부족하기 때문.

     

    앞으로 진행할 챌린지반 특강 리스트로는

    - 메모리구조

    - 클래스, 제너릭, 확장메서드

    - 디자인패턴

    - 프로젝트 구조

    - 델리게이트 활용

    - UI 기본과 팁

    - UI매니저

    - 최적화

    - 에셋 번들과 어드레서블

    - 파이어베이스, 플레이펩(외부플러그인)

    - 자소서와 포트폴리오

    - 최종프로젝트에 임하는 자세

    와 같은, 포폴에 적용했을 때 강조할 수 있을 만한 항목들이 진행된다고 한다.

     

    여기에 공통 세션도 있을 예정이라고 하셨다.

    - 기획 테이블(엑셀 -> JSON -> 게임연동)

    - DB->JSON 저장, 불러오기

    - 커스텀 에디터

    분반 세션들이 끝나고 있을 수도 있고~ 없을 수도 있지만! 없다면 분반 수업에 포함되게끔 수정할 수도 있다고..

     

    그리고 강조 받은 부분은 ✨커뮤니케이션✨

    특히나 클라이언트 개발자는 다른 다양한 팀들과 교류할 일이 매우매우 많기 때문이다.

     

    또한 그를 보조할 능력은 바로 검색 능력

    일하다보면 찾아보지도 않고 물어봤을 때... 얼마나 짜증나는가.

    그런 사람이 되지 않으려면 검색 능력은 필수인 것 같다.

     

    유니티 관련해서 검색할 때는 Unity Documentation에서 찾아보는 것도 추천해주셨다.

    생각보다 굉장히 간단하고 이해하기 쉽게 설명되어 있다고..

     

    공부하다보면 모르는 내용이 줄줄이 알감자처럼 나오는데, 어디까지 학습하고 끊어내야할 지 모르겠다고 질문했더니,

    진행 가능한 선에서 끊고 GTD 서비스를 이용하여 개인 시간이 있을 때 해당 키워드 중심으로 추가 학습을 하는 방법을 추천해주셨다.

    GTD 서비스가 무언고 하니 Getting Things Done의 약자로, To do list 같은 것을 관리하게 해주는 서비스 같다.

    구글에서 제일 상단에 보이는 https://app.clickup.com/90181565500/v/l/2kzkuz1w-458 를 가입하고 일단 당분간 써볼 예정이다.


    Input System 사용해볼까?

    강의 제일 마지막에 제시해주신 Unity Input System을 사용해볼까 한다.

    다음과 같이 Move와 Interact만 진행하는 중이다.

    사진에는 화살표 키로 매칭했었으나, TopDown_Project를 하는 동안 WASD에 익숙해져서 도로 바꿨다.

     

    FlipX하는 것부터 막혔다.

    수학을 공부한지 너~무 오래되서 벡터라는 개념부터 다시 짚어야했다.

     

    기본적으로 내가 알고 있던 건 벡터(Vector)란 방향과 크기를 모두 가지는 값이다. (좌측 이미지)

    Point A(x1, y1)에서 Point B(x2, y2)로 향하는 값이다.

    즉, Vector2(2, 1)이라면, Point A가 (0, 0)이라면, Point B는 (2, 1)인 것이다.

     

    우측 이미지는 덧셈의 경우는 아직 과제에 적용하지 않았지만, 강의에서 활용해보았던 개념이다.

    (0,0)에서 (3,5)좌표로 이동하는 Vector(3, 5)와,

    (3,5)에서 (5, 4)로 이동하는 Vector(2, -1)을 더하면 Vector(5, 4)가 되는 모습.

     

    뺄셈은 순서가 중요하다.

    무엇에서 무엇을 빼느냐에 따라 기준 점이 달라지기 때문이다.

    내 캐릭터 위치에서 적 캐릭터 위치를 빼면, 적이 나를 바라보는 방향이고

    적 캐릭터 위치에서 내 캐릭터 위치를 빼면, 내가 적을 바라보는 방향이다.

    음수 값에 따라 방향이 정반대가 되어버리니 주의해야한다.

    private void Movement(Vector2 direction)
    {
        direction = direction * 5; // 이동 속도
    
        // 실제 물리 이동
        _rigidbody.velocity = direction;
        Debug.Log(direction.x);
        Rotate(movementDirection);  //이동할때만 방향 바뀔거라서 Movement 있을 때만 확인. zep처럼
    }
    
    private void Rotate(Vector2 direction)
    {
        bool isLeft = direction.x < 0 ? true : false;
    
        characterRenderer.flipX = isLeft;
    }

     

    실제로 Debug.log(direction.x)를 찍었을 때 콘솔에 출력되는 값.

    왼쪽으로 이동할 때는 normalized된 방향인 -1에 속도 5가 곱해졌다. 오른쪽은 5를 출력했다.


    타일맵 상호작용

    사용하고 있는 에셋이 던전이라서, 상호작용할만한 이미지가 뭐가 있을까, 하는 고민을 하다가

    생명수?라고 주장하는 물건?이 근처에 있다면 F를 눌러 하늘을 나는 미니게임으로 진행하면 좋겠다는 생각이 들었다.

    생명수인줄 알았는데 하룰라라 갈 뻔 했던 것<이라는 미니 스토리를 내포하고 있다.

     

    우선은 WaterOfLife라는 타일맵을 만들어줬다.

    Collider2D를 달아주고 isTrigger를 체크해준 뒤, WaterOfLifeZoneTrigger.cs에서 OnTriggerEnter2D와 OnTriggerExit2D을 이용해 현재 내가 이 존 근처에 있는가? 를 체크해주었다.

     

    그리고 PlayerController.cs에서 OnInteract(Input System)가 눌렸을 때, 일단은 디버그 메시지를 출력하도록 했다.

    그런데 메시지가 두번씩 뜨더라고...

     

    처음에는 저렇게 True, False라고 뜨지도 않고,

    Trying to interact: UnityEngine.InputSystem.InputValue
    UnityEngine.Debug:Log (object)

    이런식으로 떠서 강사님 코드를 뜰어보다가 inputValue.isPressed를 사용하신 것 보고 활용해봤다.

    그랬더니 True 한 번, False 한 번씩 출력되는 것을 확인할 수 있었다.

     

    그래서 조건문을 아래와 같이 변경했더니, TDebug.Log가 한 번 씩만 출력된다.

    if (inputValue.isPressed)   //누를때, 뗄 때 두번 호출되서 isPressed로 체크
    {
        if (GameManager.Instance.isNextToWaterOfLife)
        {
            Debug.Log("Trying to interact: " + inputValue.isPressed);
        }
        else
        {
            Debug.Log("Nope, you're not around the Water Of Life");
        }
    }

     

     

    하지만 의문인 점이 있다.

    강사님과 함께 했던 TopDown_Project 게임에서는 isPressed 의미가 isPressing인 것처럼 마우스가 눌리는 동안 계속해서 true를 반환한다.

    하지만 내 게임에서의 f keyboard는 얼마나 오래 누르고 있던, 한번만 출력된다.

    마우스 버튼과 키보드의 차이인가? 와.. 그러네, 게임은 인풋 키 값까지 다 신경써야하니까... 그럴지도...

    일단 튜터님 퇴근하셨으니 내일 물어봐야지.


    느낀점

    하.. 고딩 때 비평준화 학교였다지만 수학 전교권이었는데, 수학 때문에 이렇게 머리를 쓸 줄은 몰랐다.

    그 정도면 일상생활에서 머리 아플 일은 없겠거니 했는데, 이제와서 프로의 세계를 지향해 버릴 줄이야...

    예전에 개발자 친구들끼리 모여서 개발 직군 별 연봉테이블에서 게임 개발자가 제일 낮은거 보고, 왜지? 제일 다복합적인 필드 아닌가? 하면서 의아했던 적이 있다. 근데 그게 내 일이 되버리니까ㅎㅎ 생각이 많아지는 군. 하지만 재밌긴 함!


    내일 학습 할 것은 무엇인지

    일단, 제공된 강의자료에서 새로 배운 것들을 정리하긴 해야한다.

    2025.07.23 - [부트캠프/개인학습] - 유니티 입문 (2D) - TopDown 에 정리를 마무리하고, 나머지 주석 공부는 해당 코드를 싹싹김치할 때마다 다는 방식으로 해야할 것 같다...