2025.02.14 (금)

윤혜진·2025년 2월 14일

📍오늘의 학습 키워드

  • 유니티 게임 개발 입문 강의 수강
    • FlappyPlane 게임 만들기 (1-1~1-9)

📍학습 내용

  • 이미지 시트를 나누는 방법
    • 여러 sprite 자료들이 들어있는 이미지 시트를 나눠주려면 다음과 같은 과정을 거치면 된다.
      1. 해당 이미지를 선택하고 inspector 창에서 Sprite Editor을 클릭한다.
      2. 사용할 sprite의 크기에 맞춰 네모를 그려준다. (네모는 드래그를 하면 바로 그릴 수 있다.)
      3. 다 그리면 Apply를 통해 저장한다.
      4. 저장하면 아래와 같이 나눠준 sprite들이 원본 시트 아래에 있는 것을 확인할 수 있음!!
  • Rigidbody의 BodyType

    • Dynamic :
      • 중력과 물리 법칙을 적용받는 일반적인 Rigidbody
      • 충돌 감지, 중력 적용, 외부 힘 사용 가능
      • 사용 예시: 플레이어 캐릭터, 던질 수 있는 공, 떨어지는 상자
    • Kinematic :
      • 물리 엔진의 영향을 받지 않지만, Transform으로 직접 이동 가능
      • 일반적인 물리적인 충돌 반응은 발생하지 않지만, OnTriggerEnter2D 메서드를 통해 isTrigger가 true인 Collider와 충돌하면 충돌을 감지할 수 있다. ()
      • 사용 예시: 움직이는 플랫폼, 애니메이션 캐릭터, 엘리베이터
    • Static :
      • 완전히 고정된 오브젝트
      • Rigidbody의 위치 변경 불가, 중력과 충돌 반응 없음
      • 사용 예시: 벽, 바닥 장애물
  • 그밖에 게임을 만들며 사용한 내장 메서드들 :

    • GetCompornent : (이 메서드를 사용한 스크립트가 붙은) 오브젝트 내에서 해당 컴포넌트를 찾음
    • GetComponentInChildren : (이 메서드를 사용한 스크립트가 붙은) 오브젝트의 하위 오브젝트까지 검색해서 해당 컴포넌트를 찾음
    • Input.GetMouseButtonDown : 마우스 몇 번째 버튼을 누르는지 검사
      • Input.GetMouseButtonDown(0): 왼쪽 마우스 버튼 클릭
      • Input.GetMouseButtonDown(1): 오른쪽 마우스 버튼 클릭
      • 컴퓨터는 마우스 버튼, 모바일로 빌드하면 터치로 인식된다.
    • Mathf.Clamp : (참고 블로그 👉https://code-piggy.tistory.com/entry/MathfClamp)
    public static float Clamp(float value, float min, float max);
    
    //value: 제한하려는 값
    //min: 허용 가능한 최소값
    //max: 허용 가능한 최대값
    
    //만약 value가 min값보다 작다면 min값으로,
    //max값보다 크다면 max값으로,
    //min과 max의 사이값이라면 그대로 반환된다.
    
    <예시>
    int num = 20;
    num = Mathf.Clamp(num, 22, 100); // num에 22가 들어감
    • FindObjectOfType : (참고 블로그 👉 https://coding-shop.tistory.com/197)
      • 씬에 있는 모든 게임 오브젝트를 검색
      • 지정된 타입의 게임 오브젝트가 하나라도 있는 경우 그 게임 오브젝트를 반환한다.
      • 지정된 타입의 게임 오브젝트가 없는 경우 null을 반환한다.
      • 검색에 시간이 걸릴 수 있다.
      • 아래는 강의에서 indObjectOfType 사용한 코드:
      void Start()
      {
          Obstacle[] obstacles = GameObject.FindObjectsOfType<Obstacle>();
          obstacleLastPosition = obstacles[0].transform.position;
          obstacleCount = obstacles.Length;
    
          for (int i = 0; i < obstacleCount; i++) 
          {
              obstacleLastPosition = obstacles[i].SetRandomPlace(obstacleLastPosition, obstacleCount);
          }
      }

📍겪은 어려움

  • 마지막 빌드 과정에서 유니티가 CPU를 혼자 80%에 가까이 잡아먹어 다소 난감했다. zap을 키고 할만한 작업은 아닌 듯...

📍회고 및 반성

  • 강의를 따라 게임을 완성하긴 했지만, 튜터님이 작성한 코드를 완벽하게 이해했다는 기분은 들지 않는다.
  • 목표는 강의를 안 보고도 같은 결과물을 만들 수 있을 정도로 익숙해지기! ...지만 시간이 얼마나 걸릴지 모르겠다. 일단은 화이팅!!

4개의 댓글

comment-user-thumbnail
2025년 2월 14일

혜진님. 항상. 잘. 보고. 있습니다. ^_^

1개의 답글
comment-user-thumbnail
2025년 2월 14일

퍼갑니다.

1개의 답글