Menu
CoddyTech

충격으로 부서지기

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

충격은 얼마나 강했을까요? collision.relativeVelocity는 두 물체가 만나는 순간 서로를 향해 얼마나 빠르게 다가가고 있었는지를 나타내며, 그 magnitude는 충돌 속도(m/s)입니다. 이는 속도 차이입니다. 같은 방향으로 10 m/s로 달리는 자동차가 8 m/s로 달리는 자동차와 부딪히면 충돌 속도는 2 m/s에 불과하며, 두 자동차 모두 같은 충돌 속도를 감지합니다.

이 달걀은 crackSpeed보다 빠른 속도로 착지하면 깨집니다. 1 m 높이에서 떨어뜨리면 약 4.4 m/s(2 x 9.81 x 1의 제곱근)로 부딪히고, 2 m 높이에서는 약 6.3 m/s로 부딪힙니다.

public float crackSpeed = 5f;

void OnCollisionEnter(Collision collision)
{
    if (collision.relativeVelocity.magnitude > crackSpeed)
    {
        Debug.Log("Splat!");
        Destroy(gameObject);
    }
}

달걀 자체의 rb.linearVelocity를 사용하면 안 될까요? OnCollisionEnter가 실행될 때쯤이면 물리 엔진이 이미 충돌을 처리했으므로, 달걀의 속도는 충돌 후 남은 속도이며 거의 0에 가깝습니다. relativeVelocity는 충돌 자체의 속도를 유지합니다. 이는 속도이므로 질량은 영향을 미치지 않습니다. 무거운 달걀과 가벼운 달걀이 6 m/s로 착지하면 둘 다 같은 6을 보고합니다.

challenge icon

챌린지

쉬움

공이 창문을 향해 굴러갑니다. 위쪽 화살표를 누르면 부드럽게, Space를 누르면 세게 굴러갑니다(Bowler.cs는 이미 작성되어 있습니다). Window.cs를 작성하세요. 창문에는 strength가 있습니다(Inspector에서 10으로 설정).

  • 충돌할 때마다 충돌 속도만큼 창문의 내구도가 감소합니다. 2 m/s로 부딪히면 strength가 2 감소합니다.
  • strength가 0 이하가 되면 창문이 산산조각 납니다. 창문을 제거하세요.

Play를 누르고, 공을 몇 번 부드럽게 굴린 다음 세게 굴리고, Check를 누르세요.

직접 해보기

using UnityEngine;

public class Window : MonoBehaviour
{
    public float strength = 10f;

    // 충돌할 때마다 충돌 속도만큼 strength가 감소하고, 0이 되면 창문이 산산조각 납니다
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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