패들
Coddy의 Unity 게임: 벽돌깨기 코스 레슨. 16개 중 1번째.
이 과정에서는 3D 브릭 브레이커를 만듭니다. 아래쪽에는 패들, 벽 사이를 튕겨 다니는 공, 그리고 부술 벽돌 벽이 있습니다. 각 강의에서는 벽돌, 생명, 레벨, 게임 오버 화면, 패들의 너비를 넓히거나 공을 분할하는 파워업 등 기능을 하나씩 추가합니다. 장면은 준비되어 있습니다. 카메라는 플레이 필드를 정면에서 바라보고, 모든 요소는 z = 0인 x-y 평면에서 움직입니다. 스크립트 Paddle, Ball, Brick, GameManager, PowerUp은 현재 간단한 기본 틀만 갖추고 있습니다.
패들에는 키네마틱 Rigidbody가 있으며, FixedUpdate에서 MovePosition을 사용해 이동합니다. 따라서 물리 시스템이 패들의 움직임을 감지하고, 나중에 공이 튕길 때 이를 반영할 수 있습니다. 키네마틱 바디는 Rigidbody가 없는 콜라이더에 의해 멈추지 않으므로, 측면 벽이 패들을 막지 않습니다. 스크립트가 패들이 벽을 넘지 않도록 합니다. 벽에서 패들의 중심을 제한하면 패들 절반이 벽 안에 들어가게 되므로, 제한 위치는 벽에서 패들 크기의 절반만큼 안쪽입니다. y = 0부터 y = 12까지의 통로를 오가는 이 승강기는 y축에서 다음과 같이 작동합니다.
float halfHeight = transform.localScale.y / 2f;
Vector3 target = rb.position + Vector3.up * input * liftSpeed * Time.fixedDeltaTime;
target.y = Mathf.Clamp(target.y, 0f + halfHeight, 12f - halfHeight);
rb.MovePosition(target);여기서 input은 위로 이동할 때 1, 아래로 이동할 때 -1, 그 외에는 0입니다. 높이가 2단위인 승강기의 중심은 1과 11 사이에 있으므로, 양 끝은 정확히 0과 12에서 멈춥니다. Cube 프리미티브는 각 면의 길이가 1단위이므로 localScale.y는 승강기의 높이입니다. 매 스텝마다 이 값을 읽으면 게임 실행 중 크기가 바뀌더라도 제한 위치가 올바르게 유지됩니다.
챌린지
쉬움Paddle의 FixedUpdate()에서 패들의 움직임을 작성하세요.
float input을 만드세요. 왼쪽 화살표 키 또는 A 키를 누르고 있으면 -1, 오른쪽 화살표 키 또는 D 키를 누르고 있으면 1, 그렇지 않으면 0입니다.- 목표 위치를 계산하세요. Rigidbody의 위치에서
input * speed * Time.fixedDeltaTime만큼 오른쪽으로 이동한 위치입니다. - 패들의 양 끝이 벽의 안쪽 면인
-wallX와wallX에서 멈추도록 목표 위치의 x를 제한하세요. 패들의 너비는transform.localScale.x입니다. rb.MovePosition으로 해당 위치로 이동하세요.
Play를 누르고 패들을 양쪽 벽에 부딪히게 이동한 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
using UnityEngine.InputSystem;
public class Paddle : MonoBehaviour
{
public float speed = 14f;
public float wallX = 8f; // 양쪽 벽의 안쪽 면은 -wallX와 wallX에 있습니다
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// 방향키 또는 A와 D로 움직이며 벽 사이에 머무르세요.
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.