Menu
CoddyTech

속도 유지하기

Coddy의 Unity 게임: 벽돌깨기 코스 레슨. 16개 중 3번째.

Brick Breaker의 공은 절대 속도가 줄어들지 않습니다. 대부분의 역할은 PhysicsMaterial이 합니다. 탄성 1은 튀어 오를 때 속도를 모두 유지하고, 마찰 0은 벽이 공을 끌거나 회전시키지 못하게 합니다. 벽과 벽돌에는 자체 재질이 없으며, Unity는 두 콜라이더의 값을 기본적으로 Average로 결합합니다. 공의 1과 벽의 기본값 0이 결합되어 튀어 오를 때 속도가 절반이 됩니다. bounceCombine = Maximum 및 frictionCombine = Minimum을 설정하면 공이 부딪히는 대상이 무엇이든 공 자체의 값이 우선 적용됩니다.

그래도 물리 계산이 완벽한 것은 아닙니다. 움직이는 패들은 튀어 오를 때 자체 속도를 더하고, 공 두 개는 서로 밀어내며, 작은 오차가 수백 번의 튕김에 걸쳐 누적됩니다. 따라서 공은 매 FixedUpdate마다 방향을 유지하고 속도를 다시 설정합니다. Ball의 Rigidbody에는 Inspector에서 Freeze Position Z도 체크되어 있어 공이 플레이 평면을 벗어나지 않습니다.

다른 게임에는 다른 규칙이 필요합니다. 에어 하키 퍽은 느려질 수 있지만 제한 속도보다 빨라지지는 않을 수 있습니다. Vector3.ClampMagnitude는 너무 긴 벡터를 짧게 만들고, 이미 더 짧은 벡터는 그대로 둡니다.

void FixedUpdate()
{
    rb.linearVelocity = Vector3.ClampMagnitude(rb.linearVelocity, maxSpeed);
}

공에는 속도 제한만으로는 충분하지 않습니다. 초당 2유닛으로 느려지면 그대로 2에 머물기 때문입니다. 공의 방향을 기준으로 속도를 정확히 설정해야 합니다.

challenge icon

챌린지

쉬움

Ball에서:

  1. Awake()에서 반발력 1, 동적 및 정적 마찰력 0, bounceCombine은 Maximum, frictionCombine은 Minimum으로 설정한 new PhysicsMaterial("Bouncy")를 만들고, GetComponent<Collider>().material을 사용해 공의 콜라이더에 할당하세요.
  2. FixedUpdate()를 추가하세요. 공이 발사된 동안 공의 현재 방향에 speed를 곱한 값을 linearVelocity로 설정하세요.

Unity에서는 머티리얼을 에셋으로 만들 수도 있습니다(Create > Physics Material). 그런 다음 Sphere Collider의 Material 슬롯에 드래그하세요. 여기서는 스크립트가 머티리얼을 만듭니다.

Play를 눌러 공을 발사하고 튕기는 모습을 확인한 다음, Check를 누르세요.

직접 해보기

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;
    bool launched;

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

    void Update()
    {
        if (launched) return;
        transform.position = paddle.position + Vector3.up * 0.5f;
        if (Keyboard.current.spaceKey.wasPressedThisFrame) Launch(new Vector3(0.3f, 1f, 0f));
    }

    public void Launch(Vector3 direction)
    {
        launched = true;
        rb.linearVelocity = direction.normalized * speed;
    }
}
quiz icon실력 점검

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

Unity 게임: 벽돌깨기의 모든 레슨