7. 물리 충돌 & 트리거 이벤트 (+Wind Zone 구현)

2023. 7. 7. 16:54C# & Unity 공부

1. 물리 충돌 이벤트 (물체와 물체가 서로 부딪힌 경우)

Otherballs.cs:

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

public class Otherballs : MonoBehaviour
{
    MeshRenderer mesh;              //선언
    Material mat;

    void Start()
    {
        mesh = GetComponent<MeshRenderer>();        //컴포넌트 불러오기
        mat = mesh.material;                        //MeshRenderer 안에 Material이 들어있음.
    }

    private void OnCollisionEnter(Collision collision)      //물리적 충돌이 시작할 때 호출되는 함수
    {
        if (collision.gameObject.name == "Ball")          //원하는 물체랑 충돌하기
            mat.color = new Color(0, 0, 0);

        //Color => 기본 색상 클래스, Color32 => 255 색상 클래스
        // (0,0,0) => 검정색, (1,1,1) => 흰색
        //if문을 쓰지 않으면 시작할 때 바닥이랑 충돌한 걸로 인식하여 원하는 결과가 안나옴
        //collision은 충돌 정보 클래스

    }

    /*
    private void OnCollisionStay(Collision collision)      //물리적 충돌이 계속되고 있을 때 호출되는 함수
    {

    }
    */

    private void OnCollisionExit(Collision collision)      //물리적 충돌이 끝났을 때 호출되는 함수
    {
        if (collision.gameObject.name == "Ball")          //원하는 물체랑 충돌하기
            mat.color = new Color(1, 1, 1);
    }
}

 

2. 트리거 이벤트 (물체가 구역 안으로 들어간 경우 ex. 윈드존)

윈드존 구현하기

1. Cube 생성

2. Material 넣고 Transparent로 바꾸고 색깔 추가

3. Albedo를 클릭하여 아래 투명도를 쭉 낮추기

4. Collider의 Is Trigger를 눌러서 충돌영역 없애기

5. Mesh Render안의 Cast Shadows를 off로 바꿔서 그림자 없애기

 

MainBall.cs(추가하기):

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

 

배운 내용:

1. MeshRenderer와 Material 클래스 선언 후, MeshRender 컴포넌트 불러오고 그 안의 Material 클래스 불러오기

2. 물리 충돌 관련 함수 OnCollision 3가지 타입 (Enter, Stay, Exit) 그리고 if문을 사용하여 원하는 물체 선택하기

Collision이란, 충돌 정보 클래스이다.

(collision.gameObject.name== "유니티에서 나타난 원하는 물체 이름")

3. Color와 Color32 차이 그리고 (0,0,0)은 검정색, (1,1,1)은 흰색이다. mat.color로 사용하기

4. Mesh Renderer의 Cast Shadows는 그림자를 넣을지 말지를 선택해준다.

5. inspector의 Collider의 Is Trigger을 선택하면 충돌하지 않는다. (Rigidbody를 통하여 중력을 넣으면 아래로 쭉 빠짐)

6. OnTriggerStay 함수는 통하여 영역에 들어갔을 경우 실행하는 함수이다.