* 유니티는 중력을 사용하면, 오브젝트를 직접 transform.Translate으로 매 프레임마다 움직이지 않아도 된다
그러나, 세부적인 제어가 필요한 경우, Translate 메서드를 사용한다
[충돌 제어]
- 오브젝트끼리 충돌하는지 판정하고 충돌 후 움직임을 정한다
- 충돌 판정 알고리즘은 복잡 -> 오브젝트를 원형이라 가정하여 단순화
- 충돌 판정 알고리즘: 피타고라스 정리 활용해 두 원(오브젝트)의 중심끼리 거리가 두 원의 반지름의 합보다 작아지면 충돌했다고 판단
- 오브젝트의 magnitude 메서드를 사용한다
[Physics 를 활용해 오브젝트에 중력 적용하기]
** Physics: unity 표준 물리 엔진 (충돌, 마찰, 낙하 등을 계산하는 시뮬레이션 용 라이브러리)
[Physics의 구성]
- Rigidbody 컴포넌트: 중력/마찰력 등 힘 계산
- Collider 컴포넌트: 물체의 충돌 판정 (충돌 판정 대상인 모든 물체에 적용되어야 함. Rigidbody는 한 쪽에만 적용되어도 됨)
-> Physics를 사용하면 오브젝트에 이 두가지 컴포넌트가 적용됨
[Physics 적용하기]
- 적용할 오브젝트 선택 > Inspector 창 > Add Component > physics 2D > Rigidbody 2D / Box or Circle Collider
** 중력 영향 받지 않도록 설정: Rigidbody 2D 컴포넌트 > Body Type > Kinematic 설정
[Collider 컴포넌트 정교화]
- 이동하는 플레이어: 캡슐형 콜라이더 사용
* 콜라이더의 모양대로 콜라이더의 테두리 선끼리 충돌 감지를 하기 때문에 바닥의 낮은 턱 등을 넘어짐 없이 지나갈 수 있음
- 캡슐형 콜라이더 제작: 박스형 콜라이더의 위아래로 원형 콜라이더를 붙여서 제작
* 원형 콜라이더의 y축 offset을 박스형 콜라이더 높이의 절반만큼 낮춘다
* 외부에서 힘을 받아 넘어지지 않도록 Constraints > Freeze Rotation 에 체크 -> 화면 안으로 들어가는 Z축 주위의 회전을 방지한다
- 충돌 시작/충돌 중/충돌 종료 상태 별 호출되는 메서드: OnCollision Enter/Stay/Exit 2D
- 충돌(만남) 감지 & 통과시키기:
a. 오브젝트 Inspector > Box Collide 컴포넌트 > is Trigger 체크
b. OnTriggerEnter2D 메서드 정의 (input: 충돌 상대의 collider) -> 충돌 감지 시 호출되는 메서드이다
* 충돌 시작/충돌 중/충돌 종료 상태 별 호출되는 메서드: OnTrigger Enter/Stay/Exit 2D
[컨트롤러 스크립트로 사용자 입력을 캐릭터 이동으로 연결]
* 좌표를 직접 변경하여 이동 X
* 힘을 가해서 이동시킴 (위치 계산은 physics가 함)
[힘을 가하는 메서드]
- AddForce(transform.힘의 방향*힘의 크기)
* 힘의 방향= up(=0,1,0), right(=1,0,0) -> 아래, 왼쪽 방향으로 이동하려면 -1을 곱해주면 된다
* 매 프레임마다 사용한다면, 물체가 가속한다
- 중력의 크기 조절: 플레이어 오브젝트 > Inspector > Rigidbody 컴포넌트 > Gravity Scale 수정
[스프라이트의 방향 반전]
- 스프라이트를 x축 방향으로 배율의 1 or -1 배 시킨다
- transform.localScale = new Vector3(1 or -1, 1, 1);
'공부' 카테고리의 다른 글
| unity07 다양한 환경의 기기에서 동작 일관화 시키기 (0) | 2026.02.10 |
|---|---|
| unity06 반복되는 오브젝트 / 애니메이션 만들기 (0) | 2026.02.10 |
| unity04 게임 UI 만들기 (0) | 2026.02.09 |
| unity03 게임 설계하기 (0) | 2026.02.09 |
| unity02 2d 게임 제작해보기 (0) | 2026.02.08 |