ㄴ유니티(Unity) 특수문자 json parsing, jsonUtillity와 litjson
ㄴ유니티(Unity) META-INF/kotlinx_coroutines_core.version
ㄴUndefined symbol : 유니티 Ios 빌드, Pod 설치 및 제거하기
ㄴ유니티(Unity) - 아이폰, 안드로이드 권한 셋팅 화면으로 이동하기
ㄴ유니티 (Unity) - Button의 OnClick Listener 사용법
ㄴ유니티(Unity) 프로젝트 점프게임 만들기 : [7] 플랫폼 생성
물리충돌
유니티에서 2d 게임을 만들 때 중요한 개발 요소 중의 하나는 이동 충돌 검사와 공격 히트 검사를 구현하는 것입니다. 이동과 히트 검사를 순수 로직으로 구현 가능하지만 신경 써야 할 부분이 상당히 많습니다. 오늘은 물리 컴포넌트를 이용하여 이동과 히트 검사를 하는 것을 알아보겠습니다.
----
----
이동
순수 로직으로만 오브젝트의 이동을 구현하게 되면 이동 중에 마주친 오브젝트들과의 거리를 계산하고 정지할지 밀고 나갈지를 결정해야 합니다. 정지까지는 복잡하지 않지만 무게나 크기등의 요소가 있어서 밀림을 구현하려면 미는 오브젝트와 밀접한 오브젝트 그리고 그 오브젝트와 밀접한 또 다른 오브젝트들에 대한 다중적인 계산이 들어가기 때문에 계산식이 복잡해지고 검증해야 하는 비용 또한 커지게 됩니다. 이 모든 것이 컴포넌트를 추가해 주는 것만으로 자연스러운 물리 연출이 가능해집니다.
컴포넌트
유니티에서 Dynamic Sprite 를 생성합니다. Rigidbody2d, Circle Collider 2D, Sprite Renderer로 구성되어 있는 오브젝트가 만들어지게 됩니다. Static Sprite는 벽이나 바닥으로 사용할 오브젝트로 생각하면 됩니다.
MovePosition
Rigidbody2d 컴포넌트를 이용하여 오브젝트를 이동시킬 수 있습니다. MovePosition 함수를 사용하여 목적지를 파라미터로 넣어주면 이동하게 되는데 목적지를 출발부터 도착까지 보간값으로 넣지 않으면 순간이동을 합니다. 아래 로직을 예로 보겠습니다.
//destPosition 으로 곧바로 이동
rigi2D.MovePosition(destPosition);
//현재 위치로부터 destPosition까지 duration 시간 동안 보간값으로 위치를 갱신
rigi2D.MovePosition(Vector2.Lerp(transform.position, destPosition, _duration));
그렇기 때문에 MovePosition을 FixedUpdate 함수 안에 구현해 주면 됩니다.
간단히 물리가 적용된 오브젝트를 이동시키는 방법은 위와 같습니다. 이제 오브젝트가 다른 오브젝트와 충돌하게 되면 충돌하게 된 오브젝트는 밀려나지만 멈추지 않고 계속해서 이동하게 됩니다.
충돌한 오브젝트의 자연스러운 이동과 멈춤을 적용하기 위해서는 Mass와 Linear Drag 수치를 조절하여 연출할 수 있습니다. Mass는 처음 충돌했을 때 밀려나가는 속도를 조절가능합니다. 무게로 보시면 됩니다. 수치가 클수록 충돌 시 밀려나는 속도가 느려집니다. 충돌 후에 밀려나가기 시작했을 때 Linear Drag 수치를 조절해 주면 이동하다가 멈추게 되는데 바닥의 마찰력으로 생각하시면 됩니다. 마찰력이 높을수록 빨리 멈추게 됩니다.
이렇게 물리 컴포넌트를 이용하여 간단하면서 자연스러운 이동연출을 할 수 있게 됩니다. 이를 기초로 삼국지12 같은 다수의 부대가 이동하면서 전투하는 게임을 만들 수 있습니다. 물론 삼국지12에서는 부대가 부대를 뒤로 미는 연출은 없기 때문에 Mass와 Linear Drag 값을 높여 놓으면 똑같이 밀리지 않게 됩니다.
'Programming > 유니티' 카테고리의 다른 글
유니티 (Unity) Rigidbody2d 게임 카메라 이동 (0) | 2024.10.28 |
---|---|
유니티(Unity) Rigidbody2d의 Addforce와 밀림방지 (0) | 2024.10.14 |
유니티(Unity) - 아이폰, 안드로이드 권한 셋팅 화면으로 이동하기 (0) | 2024.09.05 |
유니티(Unity) iOS 진동모드 일때 소리가 안나오는 현상 (0) | 2024.08.08 |
유니티(Unity) Firebase Analytics 사용시 Null Error (0) | 2024.08.02 |