TIL : Unity 입문주차-1

rain cloud·2025년 7월 22일
0

TIL

목록 보기
6/11
post-thumbnail

📕 정리

  • Unity 입문 주차가 시작되고 강의를 계속 듣고 있는데 일단 너무 어렵고, 강의 속도를 따라잡기가 너무 어려워서 최대한 머리속에 남기고 싶은 기능들을 중점으로 정리할 생각
  • 도저히 이해가 안되거나 주의해야할 부분들도 정리할 생각이다.

📋순서

  1. Input을 활용한 점프 로직 구현
  2. 팔로우 카메라
  3. 장애물 랜덤 배치 및 반복 생성

점프 로직 구현

  • 점프로직은 점프로직을 구현한 코드를 조금씩 살펴보면서 정리해 볼려고 한다.

  • Unity에서는 사용자 입력을 처리하는데 사용되는 Input 클래스가 존재한다.

    • Input 클래스 :
      • 키보드 입력 처리 : Input.GetKey, Input.GetKeyDow으로 특정 키의 입력을 확인한다.
      • 마우스 입력 처리 : Input.GetMouseButton으로 클릭을 확인할 수 있다.
      • 축 입력처리 : Input.GetAxis로 부드러운 이동을 구현할 수 있다.
  • Input 클래스를 활용하여 원하는 키로 플레이어를 점프하게 코드를 작성할 수 있다.

  • 분석

    • 우선 점프할 주체가 Player이므로 Player.cs를 만들고 점프에 관련된 필드값들을 선언 및 초기화 해준다.

    • 점프할 때의 얼만큼의 힘을 가할지를 나타내는 flapForce와 점프를 했는지 여부를 판단하는 isFlap을 선언했음을 사진을 통해 알 수 있다.

    • 계속해서 키가 입력되었는지 아닌지를 확인해줘야 하기 때문에 Update문에서 작성.

    • Input.GetKeyDown는 특정키를 눌렀을 때 true로 값을 받도록 하는데, 특정키를 Space로 설정해 주었음.(스페이스바)

    • Input.GetMouseButtonDown(0)은 마우스 좌클릭 했을때 true값 반환하는 사용자 입력 처리 코드임.

    • FixedUpdate()문인데, 이건 물리연산이 필요할때 일정 간격으로 호출이 필요하면 사용함.

    • 여기서 IsFlap 즉 점프를 했다고 인식하면 점프니까 RigidBody2D의 velocity y의 값을 앞서 설정한 점프 물리 값을 넣어준다.

    • 그러면 그 속도 힘만큼 플레이어가 y축 방향으로 움직이게 됨.


팔로우 카메라

  • 팔로우 카메라가 그냥 플레이어 움직일 때 카메라도 일정거리를 유지한채 따라서 움직이게 하는 것을 말한다.

  • 현재 MainCamera를 기준으로 구현하였으므로, FollowCamera.cs를 만들어 MainCamera에 스크립트를 컴포넌트로 붙여 준다.

    • 따라갈 대상 즉, 여기선 Player다. public으로 만들어 주었으니 인스펙터에서 값을 넣어주겠다는 뜻이고, Transform으로 속성을 정해주었으니, Player(Transform) 값을 가져오겠다는 소리다.
    • offsetX는 카메라와 대상간의 거리를 나타낼 필드로서 선언
    • 스크립트가 붙어있는 메인카메라의 position x와 따라다닐 대상의 위치 x값을 빼주면 카메라와 대상간의 거리가 얼마인지 알 수 있다.
    • 이 거리를 유지한 채 따라가게 하기 위해 offsetX에 저장해준다.
    • 일단 카메라의 위치값을 가지고 온 뒤, 카메라의 x축 위치에 (대상의 x축 위치 + 대상과 카메라간의 거리) 값을 넣어준다.
    • 그러면 매번 업데이트되는 타겟의 x축 위치에 맞추어서 카메라의 x축 위치도 바뀌게 된다.
    • 그리고 카메라 위치를 업데이트 해줘서 실제 변경값을 적용해준다.

장애물 랜덤 배치 및 반복 생성

  • 우선 장애물 랜덤 배치에 관해서 코드를 분석해보고자 한다.

  • 분석

    • 우선 Obstacle.cs를 만들고 장애물 오브젝트에 스크립트를 컴포넌트로서 붙여준다.
    • Obstcle에서 필드값을 선언 및 초기화 해서, 생성되는 범위를 미리 지정해준다.
    • SetRandomPlace 함수를 생성하고, 앞서 만들어놓은 필드값들을 활용하여 랜덤 생성 범위를 제한해준다.
    • topObject, bottomObject의 localPosition의 값에 랜덤 생성 값을 넣어준다.
      • localPosition인 이유는, topObject와 bottomOjbect가 자신의 부모 오브젝트인 Obstacle의 범위 안에서만 위치값의 이동이 가능하기 때문
    • 백터 placePostion에 마지막으로 배치된 오브젝트 뒤에 배치되는 x위치값을 넣어주고, 그 뒤에 y값은 랜덤 배치 값을 넣어줌
    • 이건 이 스크립트가 붙어 있는 Obstacle의 위치를 지정해준 것.(top,bottom이 통째로 움직임)
      • 앞선 localPosition은 하위 오브젝트의 위치 범위 지정해 준것.
  • SetRandomPlace에 적절한 값만 매개변수로 주면 랜덤 배치가 완료된다.

  • 반복 생성

    • 카메라를 일정 거리를 두고 따라오는 BgLooper에 Rigidbody2D, BoxCollider2D를 붙여주고, Obstacle에 BoxCollider2D 붙여주고 Is Trigger를 체크해준다.
    • 이러면 서로 충돌 했을 때 물리적으로 충돌하지 않고 충돌했다는 신호만 보낸다.
    • 장애물 개수 받아올 필드 값 선언한다.
    • FindObjectsOfType사용해서 씬에 있는 모든 장애물 오브젝트를 배열로 받아온다.
    • 첫 번째 장애물을 마지막 위치로 설정하기 위해 obstacleLastPosition 값에 넣어주고 for문을 사용해 씬에 있는 모든 장애물을 랜덤 배치해준다.
    • BgLooper와 충돌했을 때 충돌한 장애물을 SetRandomPlace를 사용해서 재 배치하여 obstacleLastPosition에 값을 넣어주어 장애물들의 제일 뒤로 이동시킨다.

배운 점

  • 우선 Input의 사용법을 배우게 되어서 다른 키로도 입력을 할 수 있게 응용을 할 수 있을 것 같다는 생각이 들었다.
  • 구현하고자 하는 기능에서 물리력에 관한 거면 Inspector창에서 정확히 어떤 부분이 영향을 받을지 미리 생각하고 코드를 작성하는 것이 도움이 될 것 같다고 생각하게 된 것 같다.
  • 이렇게 정리하니까 이해가 안되었던 부분도 다시 생각해보면서 이런 내용이었구나 하면서 알게 된 것 같다.
profile
게임 개발, 기획

0개의 댓글