Menu
CoddyTech

무엇에 부딪혔을까?

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 9번째.

Unity가 OnCollisionEnter에 전달하는 Collision은 접촉한 상대편을 설명합니다. collision.gameObject는 부딪힌 객체이므로 collision.gameObject.name은 그 객체의 이름이고, collision.gameObject.CompareTag("Hazard")는 그 객체의 태그를 확인합니다. (객체에 콜라이더가 여러 개 있는 경우, collision.collider는 실제로 접촉한 콜라이더입니다.)

이 범퍼카는 부딪히는 대상을 모두 기록하고 위험 요소에 부딪히면 불평합니다.

void OnCollisionEnter(Collision collision)
{
    Debug.Log("Bumped into " + collision.gameObject.name);
    if (collision.gameObject.CompareTag("Hazard"))
    {
        Debug.Log("Ouch!");
    }
}

기록되는 첫 번째 줄은 게임이 시작되는 순간의 Bumped into Floor입니다. 범퍼카가 서 있는 바닥과의 접촉도 충돌이기 때문입니다. 따라서 충돌에 반응하는 스크립트는 먼저 무엇에 부딪혔는지 확인합니다. 어떤 객체의 이름을 확인하는지 주의하세요. CompareTag("Hazard")만 사용하면 자기 객체의 태그를 확인하고, Destroy(gameObject)는 자기 객체를 파괴하지만, Destroy(collision.gameObject)는 부딪힌 객체를 제거합니다.

challenge icon

챌린지

쉬움

제설차에 Snow 태그가 지정된 블록을 치우는 일을 맡기세요.

  1. Plow에 void OnCollisionEnter(Collision collision)을 추가하고, collision.gameObject.CompareTag("Snow")일 때만 작동하도록 하세요.
  2. 그 안에서 Destroy(collision.gameObject);를 실행하고, cleared 필드에 1을 더한 다음 "Cleared " + cleared를 로그에 출력하세요.

‘플레이’를 누르고 눈 속으로 운전해 들어가세요. 블록이 하나씩 사라지고 Console에 개수가 표시됩니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class Plow : MonoBehaviour
{
    public float speed = 3f;
    private Rigidbody rb;
    private int cleared;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, 0);
    }

    // 제설기가 부딪힌 눈: 제거하고, 개수를 센 다음 그 개수를 로그에 기록한다
}

물리와 게임플레이의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드