무엇에 부딪혔을까?
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 9번째.
Collision은 Unity가 OnCollisionEnter에 전달하는 값으로, 접촉한 상대편을 설명합니다. 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)는 부딪힌 객체를 제거합니다.
챌린지
쉬움화살표(이미 작성되어 있음)로 제설차를 움직여 작업을 수행하게 하세요. 두 개의 흰색 블록에는 Snow 태그가 지정되어 있습니다.
- 제설차가
Snow태그가 지정된 물체에 부딪히면 해당 블록을 제거하고, 카운트에 1을 더한 다음 로그를 출력하세요:Cleared 1,Cleared 2. - 제설차가 닿는 나머지 모든 것, 바닥과 벽을 포함해, 제자리에 그대로 둡니다.
Play를 눌러 도로를 치운 다음 Check를 누르세요.
직접 해보기
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);
}
// 제설기가 부딪히는 눈: 제거하고, 개수를 세어 기록한다
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.