물리 장애물 없는 환경에서 게임오브젝트 이동
프로젝트 생성
기본
- 2D로 생성하였기 때문에 현재 Hierarchy View에는 카메라만 존재.
- 위치는 (X: 0, Y: 0, Z: -10).
- Projection > Orthographic.
- 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회 호출.
'유니티' 카테고리의 다른 글
유니티 04. 2D 스프라이트 / 애니메이션 (1) | 2024.05.01 |
---|---|
유니티 04. 플랫폼 게임에서의 플레이어 이동, 점프 구현 (1) | 2024.05.01 |
유니티 03. 게임오브젝트 생성 & 삭제 함수 및 Instantiate() 활용 (0) | 2024.04.17 |
유니티 02. 이벤트 함수 (0) | 2024.04.10 |
유니티 01. 에디터 인터페이스, 게임 오브젝트 & 컴포넌트 (0) | 2024.04.03 |