유니티

유니티 02. 게임오브젝트

채채_._. 2024. 4. 10. 11:42

물리 장애물 없는 환경에서 게임오브젝트 이동

 

프로젝트 생성

기본

  • 2D로 생성하였기 때문에 현재 Hierarchy View에는 카메라만 존재.
  • 위치는 (X: 0, Y: 0, Z: -10).
  • Projection > Orthographic.

Square에 넣은 이미지

- Sprite Renderer에 내가 보여고자 하는 사진 넣기.

 

Transform.position

- 위치를 제어하는 컴포넌트

- 오브젝트의 위치를 해당 영역에서 조정할 수 있음.

- 포지션 정보를 바꾸게 되면 오브젝트의 위치를 바꿀 수 있음.

- 왼쪽 transform.position은 값을 설정. 오른쪽 transform.position 값을 사용.

- new Vector3(x,y,z)*속도

- new Vector3(x,y,z)*1 = Vector3.right*1

- 실행하면 오른쪽으로 1만 감. 다만, awake 함수를 활용했기 때문에 게임이 실행되는 동안 계속 움직이지는 않음.

 

Update() 함수 & Time.deltaTime

- Update 함수로 계속 움직이도록 설정.

- Update 함수로 이동 전 크기 변화를 지속해서 증감 시키는 행위를 할 때 Time.detlaTime을 곱해줘야 함.

- Time.deltaTime을 곱해줘야 하는 이유 : Update 함수가 fps 수치에 따라 1초에 몇 번 호출될지 결정.

 

Time.deltaTime

- 사양이 좋은 컴퓨터가 더 많은 움직이는 것을 방지하기 위해 이전 Update() 종료부터 다음 Update() 시작까지의 시간

- 업데이트 사이의 시간

- 이동거리 = 방향 * 속도 * Time.deltaTime

실시간으로 움직임

 

Input.GetAxisRaw()

- Input.GetAxisRaw() : 유니티에 미리 설정된 단축키를 이용하는 함수.

- project settings에 들어가면 input manager를 찾을 수 있음.

- Size도 조정할 수 있으며 Horizontal 들어가면 버튼 총 4개를 등록할 수 있음.

  • Negative Button (2개)
  • Positive Button (2개)

- 해당 버튼에서 선택하는 left, right 방향키를 의미함.

- float value = Input.GetAxisRaw("단축키명"); > 긍정 : +1 / 부정 : -1 / 대기 : 0

- float value = Input.GetAxis("단축키명"); > GetAxisRaw()는 키를 누르면 바로 1 or -1 / GetAxis()는 0에서 1 or -1로 서서히 증가.

방향 조절 가능

게임오브젝트 충돌

Rigidbody2D 컴포넌트

- 2차원 공간에서 오브젝트의 물리와 중력을 담당하는 컴포넌트.

- 오브젝트에 물리를 적용하고 중력을 받을 수 있도록 함.

- 물리와 관련된 컴포넌트

  • 2D : Component - Physics 2D
  • 3D : Component - Physics

 

Collider2D 컴포넌트

- 2차원 공간에서 오브젝트의 충돌 범위를 나타냄.

- 물리력에 의한 이동 회전, 마찰력 같이 다른 오브젝트와 상호작용이 필요한 경우 필요.

- 충돌 범위이 생김새나 특징에 따라 "OO Collider 2D" 같이 이름을 명명함.

  • Box Collider 2D : 사각형 범위의 충돌 범위
    • 변수
      • Offset : 충돌 범위 중심점
      • Size :  충돌 범위 크기
  • Circle Collider 2D : 원 범위의 충돌 범위, 연산 속도가 가장 빠름.
    • 변수
      • Offset : 충돌 범위 중심점
      • Radius : 충돌 범위 반지름 크
  • Edge Collider 2D : 점의 개수, 각 점의 위치를 설정할 수 있기 때문에 다양한 곡선 형태로 충돌 범위 표현 가능.
    • 변수
      • Offset : 충돌 범위 중심점
      • Edge Radius : 충돌 선의 두께
      • Points : 선을 이루는 점의 개수와 각 점의 위치
  • Polygon Collider 2D : 텍스처의 모양과 비슷한 형태로 충돌 범위 생성, Edge와 마찬가지로 Points 수정 가능.
    • 변수
      • Offset : 충돌 범위 중심점
      • Points : 선을 이루는 점의 개수와 각 점의 위치
  • Capsule Collider 2D : 캡슐 모양의 충돌 범위 생성, 주로 사람 형태의 캐릭터에 사용
    • 변수
      • Offset : 충돌 범위 중심점
      • Size : 충돌 범위 크기
      • Direction : 둥근 캡슐이 표현되는 방향
  • Composite Collider 2D : 다른 게임오브젝트의 Collider 2D를 하나로 묶어주는 역할, Box Collider/Polygon Collider 2D만 가능.

- 위의 실습 사진 처럼 충돌 범위가 꼭 오브젝트와 동일하게 설정 되지 않아도 상관없음.

 

두 오브젝트의 충돌

1. 두 오브젝트 모두 충돌 범위 Collider2D 컴포넌트 가지고 있어야 함.

2. 둘 중 하나 이상의 오브젝트가 물리 처리를 담당하는 Rigidbody2D 컴포넌트를 가지고 있어야 함.

- 중력을 받아 떨어지지 않도록 gravity scale 0으로 설정.

- 기존에 사용했던 코드 사용.

- 이동은 잘 되지만 장애물과 충돌했을 때 어떤 식으로 처리하라는 내용이 없기 때문에 결과와 같이 자꾸 뚫고 지나가려고 하는 것을 확인할 수 있음.

 

rigid2D.velocity

- 부드럽게 멈춤

- velocity 변수 : 방향과 속도를 나타냄

- Rigidbody2D : "장애물을 만나게 되면 이동을 하지 말고 그대로 멈춰라"

 

OnCollision__2D 충돌 이벤트 함수

- 보통 게임에서 오브젝트끼리 충돌하면 체력이 감소되거나 아이템을 먹는다는 등 행위가 일어남.

  이에 물리적인 충돌이 일어나고 이벤트 함수가 호출됨.

  • OnCollisionEnter2D() : 두 오브젝트가 충돌하는 순간 1회 호출.
  • OnCollisionStay2D() : 충돌 직후 맞닿아 있는 동안 매 프레임 호출.
  • OnCollisionExit2D() :  두 오브젝트가 떨어져서 충돌이 종료되는 순간 1회 호출.

- 매개변수 Collision2D collision : 현재 컴포넌트를 가지고 있는 오브젝트에 부딪힌 오브젝트 정보

- [SerializeField] : Inspector View에서 변수의 옵션을 조절할 수 있게 해줌.

 

- 충돌하게 되면 지정한 색으로 변하는 것을 볼 수 있음.

 

OnCollision__2D 충돌 이벤트 함수

- 물리적인 충돌이 일어나지 않아 두개의 오브젝트가 서로 뚫고 지나가는 대신 충돌되는 순간에 호출

  • OnTriggerEnter2D() : 두 오브젝트가 충돌하는 순간 1회 호출.
  • OnTriggerStay2D() :  충돌 직후 맞닿아 있는 동안 매 프레임 호출.
  • OnTriggerExit2D() :  두 오브젝트가 떨어져서 충돌이 종료하는 순간 1회 호출.