c++과 c# 책을 다 보고 난 후 유니티 게임 공부가 당겨서 다시 하는 중에 몰랐고 그래서 새롭게 알게 된 점을 작성해 보려 합니다.
제가 '이름표는 멈추지 않아!' 라는 2D 플랫포머 게임을 1년 이상 개발하고 구글 플레이 스토어에 런칭까지 하면서 2D 플랫포머 게임은 익숙해졌다고 생각했는데 개발하면서 알았으면 훨씬 좋았던 점을 책 보고 공부하면서 안 내용을 핵심만 작성해 보려고 합니다.
1. 트리거
트리거는 두 (콜라이더 컴포넌트가 포함된)물체중 하나가 충돌할 때 하나 이상 Is Trigger가 체크돼있으면 발동되는 건 알 겁니다.
트리거는 콜리전과 달리 부딪힌 물체와 물리적인 상호작용이 아닌 닿았는지 아닌지만 판단합니다.
그러므로 콜라이더 안에 들어온 오브젝트에 대한 상대 게임오브젝트의 정보가 담겨있습니다.
저도 이걸 알고는 있었지만 그냥 이름 알아내거나 실제로 들어왔는지만 판단하고 응용할 생각은 못했는데
//총알 스크립트
public class Bullet : MonoBehaviour {
public float speed = 8f; // 총알 이동 속력
private Rigidbody bulletRigidbody; // 이동에 사용할 리지드바디 컴포넌트
void Start() {
// 게임 오브젝트에서 Rigidbody 컴포넌트를 찾아 bulletRigidbody에 할당
bulletRigidbody = GetComponent<Rigidbody>();
// 리지드바디의 속도 = 앞쪽 방향 * 이동 속력
bulletRigidbody.velocity = transform.forward * speed;
// 3초 뒤에 자신의 게임 오브젝트 파괴
Destroy(gameObject, 3f);
}
// 트리거 충돌 시 자동으로 실행되는 메서드
void OnTriggerEnter(Collider other) {
// 충돌한 상대방 게임 오브젝트가 Player 태그를 가진 경우
if (other.tag == "Player")
{
// 상대방 게임 오브젝트에서 PlayerController 컴포넌트를 가져오기
PlayerController playerController = other.GetComponent<PlayerController>();
// 상대방으로부터 PlayerController 컴포넌트를 가져오는데 성공했다면
if (playerController != null)
{
// 상대방 PlayerController 컴포넌트의 Die() 메서드 실행
playerController.Die();
}
}
}
}
위의 OnTriggerEnter 메소드 안에 있는 것처럼 Player가 가지고 있는 커스텀 컴포넌트(=스크립트, 유니티의 게임오브젝트는 컴포넌트로 이루어져 있고 스크립트도 다를바 없다)인 PlayerController를 가져와 멤버와 메소드를 쓸 수 있게 할 수 있다.
2.콜리전
콜리전은 나랑 물리적으로 부딪힌 오브젝트에 대한 정보가 담깁니다.
부딪힌 위치 위치, 상대와 나의 거리, 충격량, 상대의 정보 등등을 알려줍니다
OnCollision 계열의 이벤트 메서드는 여러 충돌 정보를 담는 Collision 타입의 데이터를 입력받습니다.
Collision 타입은 충돌 지점들의 정보를 담는 ContactPoint 타입의 데이터를 contacts라는 배열 변수로 제공하고
따라서 contacts 배열의 길이는 충돌 지점의 개수와 일치합니다.
사용 예시
1.
private void OnCollisionEnter2D(Collision2D collision)
{
// 첫번째 충돌 위치
collision.contacts[0]
}
2.
private void OnCollisionEnter2D(Collision2D collision)
{
// 플레이어가 첫번째 충돌지점인 바닥과 닿았는데
// 충돌 표면의 방향(노말벡터)가 위쪽이며 경사가 너무 급하지 않은지 검사하는 코드
if (collision.contacts[0].normal.y > 0.7f)
{
}
}
아래 그림들은 충돌 표면의 방향에 따른 노말벡터 값입니다.
https://docs.unity3d.com/ScriptReference/Collision.html
Unity - Scripting API: Collision
Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close
docs.unity3d.com
구글에 유니티 Collision Type 속성에 대해서 검색해 보시면 더 다양한 내용이 나옵니다.
'유니티엔진 - 게임 공부' 카테고리의 다른 글
유니티 프로젝트 추가시 .ignore가 적용되지 않는 이유 (0) | 2024.03.26 |
---|---|
Unity UnityAction (0) | 2023.04.05 |