본문 바로가기
유니티

유니티 물리충돌 이벤트

by 실버dev 2019. 11. 7.
// 물리적 충돌이 시작할 때 호출되는 함수
	// Collision은 충돌 정보를 제공하는 클래스
	private void OnCollisionEnter(Collision collision)
	{
		//이름이 myBall인 오브젝트와 충돌했을때
		if(collision.gameObject.name == "myBall")
		{
			mat.color = new Color(0, 0, 0); //충돌시 색을 검정색으로 변경
		}
	}​
MeshRenderer mesh;//오브젝트의 재질 접근은 Meshrenderer를 통해서
Material mat;

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

유니티 오브젝트의 재질 접근은 MeshRenderer를 사용한다.

 

 

// 물리적 충돌이 시작할 때 호출되는 함수
	private void OnCollisionEnter(Collision collision)
	{

	}

	// 물리적 충돌 중
	private void OnCollisionStay(Collision collision)
	{

	}

	//물리적 충돌에서 벗어났을 때
	private void OnCollisionExit(Collision collision)
	{

	}

충돌이 일어났을 때 발생하는 이벤트 함수들이다.

 

 

// 물리적 충돌이 시작할 때 호출되는 함수
	// Collision은 충돌 정보를 제공하는 클래스
	private void OnCollisionEnter(Collision collision)
	{
		//이름이 myBall인 오브젝트와 충돌했을때
		if(collision.gameObject.name == "myBall")
		{
			mat.color = new Color(0, 0, 0); //충돌시 색을 검정색으로 변경
		}
	}

충돌시 색이 변하도록 변경하는 코드.

특정 오브젝트와 충돌했을 때 조건을 주지 않으면 바닥과 맞닿을때도 이벤트가 발생하므로

myBall오브젝트와 충돌했을 때로 상황을 한정시킨다.

 

 

 

 

 

 

트리거

 

트리거는 충돌이 아니라 해당 영역에 들어오면 발생한다.

 

 

Is trigger를 체크

 

private void OnTriggerStay(Collider collider)
{
	if (collider.name == "Cube")
	{
		rigid.AddForce(Vector3.up, ForceMode.Impulse);
	}
}

OnTrigger 코드

큐브 안으로 들어오면 위로 떠오르도록 설정.

 

 

 

 

전체코드

 

myBall 이동, 트리거

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyBallRigid : MonoBehaviour
{
	Rigidbody rigid;
    void Start()
    {
		rigid = GetComponent<Rigidbody>(); //괄호 안 타입의 컴포넌트를 가져온다.
										   //2D에서 3D Rigidbody를 쓰면 적용이 안됨.
		rigid.AddForce(Vector3.up * 5, ForceMode.Impulse); // ForceMode : 힘을 주는 방식(가속, 무게 반영)
    }
	
	void FixedUpdate()
	{
		if (Input.GetButtonDown("Jump"))
		{
			rigid.AddForce(Vector3.up * 5, ForceMode.Impulse); // ForceMode : 힘을 주는 방식(가속, 무게 반영)
		}
		Vector3 vec = new Vector3(Input.GetAxisRaw("Horizontal") * 0.1f, 0, Input.GetAxisRaw("Vertical") * 0.1f);
		rigid.AddForce(vec, ForceMode.Impulse);

		rigid.AddTorque(Vector3.up);
	}
	//Collision 대신 Collider를 사용한다.
	private void OnTriggerStay(Collider collider)
	{
		if (collider.name == "Cube")
		{
			rigid.AddForce(Vector3.up, ForceMode.Impulse);
		}
	}
}

 

 

다른 공 충돌시 색깔변경

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class OtherBall : MonoBehaviour
{
	MeshRenderer mesh;//오브젝트의 재질 접근은 Meshrenderer를 통해서
	Material mat;

	void Start()
    {
		mesh = GetComponent<MeshRenderer>();
		mat = mesh.material;
    }
	
	// 물리적 충돌이 시작할 때 호출되는 함수
	// Collision은 충돌 정보를 제공하는 클래스
	private void OnCollisionEnter(Collision collision)
	{
		//이름이 myBall인 오브젝트와 충돌했을때
		if(collision.gameObject.name == "myBall")
		{
			mat.color = new Color(0, 0, 0); //충돌시 색을 검정색으로 변경
		}
	}

	// 물리적 충돌 중
	private void OnCollisionStay(Collision collision)
	{

	}

	//물리적 충돌에서 벗어났을 때
	private void OnCollisionExit(Collision collision)
	{
		if (collision.gameObject.name == "myBall")
		{
			mat.color = new Color(1, 1, 1); //충돌시 색을 검정색으로 변경
		}
	}
}

'유니티' 카테고리의 다른 글

유니티 rigidbody  (0) 2019.11.07
유니티 오브젝트 충돌 관련 컴포넌트  (1) 2019.11.03
유니티 목표지점으로 이동하기  (1) 2019.11.02
유니티 키입력, 이동  (0) 2019.11.02
유니티 라이프 사이클  (0) 2019.11.02