시작하기
Coddy의 Unity 게임: 벽돌깨기 코스 레슨. 16개 중 2번째.
공은 플레이어가 발사할 때까지 패들 위에서 대기합니다. 그때까지 스크립트는 매 프레임 공을 패들 위에 놓으므로, 패들이 움직이는 곳마다 공도 따라가고, 발사 여부는 bool이 기억합니다. 발사할 때 Rigidbody의 linearVelocity를 한 번 설정합니다. 공의 Rigidbody는 중력이 꺼져 있으므로, 그 후에는 무언가에 부딪힐 때까지 해당 속도로 직선 비행합니다.
낚시찌도 같은 방식으로 작동합니다. 낚싯대를 던질 때까지 낚싯대 끝 아래에 매달려 있습니다.
bool cast;
void Update()
{
if (cast) return;
transform.position = rodTip.position + Vector3.down * 1.5f;
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
cast = true;
rb.linearVelocity = new Vector3(4f, 3f, 0f);
}
}wasPressedThisFrame은 키를 누른 프레임에서만 true이므로, 매 프레임 한 번 실행되는 Update()에서 읽습니다. 낚시찌는 (4, 3, 0)의 길이인 초당 5유닛의 속도로 날아갑니다. 어떤 방향으로든 정확한 속도로 발사하려면 .normalized를 사용해 방향의 길이를 1유닛으로 만든 다음, 속도를 곱합니다.
챌린지
쉬움Ball에서:
bool launched를 추가합니다.public void Launch(Vector3 direction)을 작성합니다.launched를 true로 설정하고 Rigidbody의linearVelocity를 방향 벡터의 길이가 1이 되도록 만든 다음speed를 곱한 값으로 설정합니다.Update()를 추가합니다. 공이 발사되지 않은 동안 공을 패들의 위치보다 0.5 단위 위에 놓고, Space를 누르면Launch(new Vector3(0.3f, 1f, 0f))를 호출합니다.
아직 공이 튕기지 않으므로 처음 부딪히는 벽에서 바로 멈춥니다. 다음 강의에서 이 문제를 해결합니다.
Play를 누르고, 패들을 움직인 다음 공을 발사하고 Check를 누릅니다.
직접 해보기
using UnityEngine;
using UnityEngine.InputSystem;
public class Ball : MonoBehaviour
{
public Transform paddle;
public float speed = 9f;
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
// 다음: Space를 눌러 공을 발사할 때까지 공은 패들 위에 놓여 있습니다.
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.