Menu
CoddyTech

패들로 방향 조준하기

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

완벽하게 튀어 오르면 플레이어는 조준할 수 없습니다. 브릭 브레이커 게임에서는 패들이 방향을 결정합니다. 왼쪽 끝 가까이를 맞히면 공은 왼쪽 위로 날아가고, 가운데를 맞히면 곧장 위로 날아갑니다.

맞힌 위치를 왼쪽 끝에서 -1부터 오른쪽 끝에서 1까지의 숫자로 바꾸세요. 즉, 패들 중심에서 공의 x 오프셋을 패들 너비의 절반으로 나눕니다. 너비가 4이고 x 2를 중심으로 하는 패들을 x 3에서 맞히면 오프셋은 1, 너비의 절반은 2이므로 숫자는 0.5가 되고, 공은 정규화된 (0.5, 1, 0) 방향으로 날아갑니다. 공이 모서리에 닿을 때 끝을 약간 넘어갈 수 있으므로 값을 제한하세요.

OnCollisionEnter는 물리 엔진이 튕기는 방향을 계산한 뒤에 실행되므로, 그곳에서 설정한 속도가 기존 속도를 대체합니다. 벽도 공을 튕겨 보내므로 벽은 기존 방식대로 튕기게 하고, 먼저 태그를 확인하세요. collision.collider.bounds.size.x는 월드 좌표에서 패들의 너비입니다.

challenge icon

챌린지

쉬움

패들로 공의 방향을 조준하세요. 공이 어디에 떨어지는지가 각도를 결정합니다.

  1. Ball에 OnCollisionEnter(Collision collision)을 추가하고, 부딪힌 객체에 Paddle 태그가 지정되어 있지 않으면 반환하세요.
  2. float x를 계산하세요. 공의 x 좌표에서 패들의 x 좌표를 뺀 값을 collision.collider.bounds.size.x의 절반으로 나눈 뒤, -1과 1 사이로 제한합니다.
  3. rb.linearVelocity = new Vector3(x, 1f, 0f).normalized * speed;를 설정하세요.

‘플레이’를 누르고 패들의 왼쪽 끝으로 공을 받아 보세요. 공이 왼쪽으로 날아갑니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

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>();
        PhysicsMaterial bouncy = new PhysicsMaterial("Bouncy");
        bouncy.bounciness = 1f;
        bouncy.dynamicFriction = 0f;
        bouncy.staticFriction = 0f;
        bouncy.bounceCombine = PhysicsMaterialCombine.Maximum;
        bouncy.frictionCombine = PhysicsMaterialCombine.Minimum;
        GetComponent<Collider>().material = bouncy;
    }

    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;
    }

    void FixedUpdate()
    {
        if (!launched) return;
        rb.linearVelocity = rb.linearVelocity.normalized * speed;
    }
}

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

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