// 물리적 충돌이 시작할 때 호출되는 함수
// 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 |