유니티

유니티 물리 충돌 이벤트 / OnCollision-- / OnTrigger--

nock_ji 2022. 4. 12. 15:07

TIL

 

📝  물리 충돌 이벤트

📝  OnCollision--

📝  트리거 이벤트 

📝  OnTrigger--

 


 

👩‍💻  물리 충돌 이벤트 

 

Ball이 다른 Ball과 충돌했을 때 Meterial Color가 변하는 물리 충돌 이벤트를 구현해보겠습니다 

 

줄무늬 공 : Ball_1

나머지 공 : Ball_2 ~ Ball_5

 

색이 변하는 나머지 검은 색 공에게 적용할 스크립트를 새로 생성합니다 

 

 

 

 

 

📌  오브젝트의  재질  바꾸기

오브젝트의 재질 접근은 MeshRenderer를 통해서 합니다 

즉, MeshRenderer - Materials - otherBall에 접근해서 Albeo 색을 바꾸는 로직이 필요합니다 

 

 

 

마찬가지로 선언 -> 초기화 -> 호출  과정이 필요합니다 

📍 선언

MeshRenderer mesh; 
Material mat;

MeshRenderer / Material 선언 

 

 

📍초기화 

void Start()
{
	mesh = GetComponent<MeshRenderer>(); 
    	mat = mesh.material;
}

GetComponent<T>  : 자신의 T타입 컴포넌트를 가져오는 메서드

MeshRenderer 컴포넌트를 가져왔습니다

Material mat은 MeshRenderer에서 material 임을 초기화합니다 

 

 

 

 

 

 

 

👩‍💻 실제 물리적인 충돌로 발생하는 이벤트

 

📌 OnCollisionEnter

물리적 충돌이 시작할 때 호출되는 함수

void OnCollisionEnter(Collision collision)
{
}

Collision : 충돌 정보 클래스

 

 

 

📌 OnCollisionStay

물리적 충돌이 일어나고 있을 때 호출되는 함수

void OnCollisionStay(Collision collision)
{
}

 

 

📌 OnCollisionExit

물리적 충돌이 끝났을 때 호출되는 함수 

void OnCollisionExit(Collision collision)
{
}

 


 

 

🔻 4개의 검은 공이 특정 이름의 오브젝트와 충돌하면, 흰 공으로 바뀌는 로직

void OnCollisionEnter(Collision collision)
{
	if (collison.gameObject.name == "Ball_1")
    	mat.color = new Color(1, 1, 1);
}

 

collision.gameObject.name : 충돌이 감지된 GameObject 이름를 감지합니다 (읽기 전용)

Color : 기본 색상 클래스

 

Ball_1 (줄무늬공) 과 닿았을 때 if문 로직을 실행합니다

material의 color에 접근하여 새로운 컬러를 부여합니다. (1, 1, 1)은 흰 색입니다. 

 

 

 

 

 

 

 

 

 

🔻 충돌이 끝났을 때, 다시 검은 색으로 바뀌는 로직

 

충돌이 끝난 경우 OnCollisionExit를 사용합니다

void OnCollisionExit(Collision collsion)
{
	if (collision.gameObject.name == "Ball_1")
    	mat.color = new Color(0, 0, 0);
}

color 와 실행함수만 바꾸었습니다 

 

 

 

 


 

👩‍💻  트리거 이벤트

 

 

📌 OnCollisionEnter

Collider 충돌로 발생하는 이벤트 

void OnTirggerEnter(Collider other)
{
}

Collider은 모든 충돌체의 기본 클래스입니다. 

 

 

 

📌 OnCollisionEnter

Collider 충돌이 끝나고 발생하는 이벤트

void OnTirggerStay(Collider other)
{
}

 

 

 

📌 OnCollisionEnter

Collider 충돌로 발생하는 이벤트 

void OnTirggerStay(Collider other)
{
}

 

 

 

 

 

🔻 특정 영역 안에 들어갈 때 점프하는 것을 구현해보겠습니다

Cube를 새로 생성하고 Box Collider의 Is Trigger를 활성화시킵니다 

 

Is Trigger를 활성화시키면 cube가 표시되지만 cube가 차지하고 있는 영역을 자유롭게 드나들 수 있습니다 

 

 

 

 

 

 

🔻 줄무늬공이 Cube Collider와 충돌하는 동안 이벤트가 발생하는 로직

void OnTriggerStay(Collider other)
{
	if (other.name == "Cube") //Cube이름을 가진 콜라이더와 충돌하고 있을 때 로직 실행
    	//로직
}

줄무늬 공 스크립트에 해당 로직을 적어줍니다

 

 

 

 

 

 

🔻 줄무늬 공이 Cube 영역에서 바람이 불어 위로 올라가는 듯한 이벤트를 겪는 로직을 적어주겠습니다 

rigid.AddForce(Vector3 * 2, ForceMode.Impuse);

 

전체 로직은 이러합니다 

.

.

.