Menu
CoddyTech

发射

Coddy Unity 游戏:打砖块 课程的第 2 课,共 19 课。

球会停在挡板上,直到玩家发射它。在此之前,Update() 会在每一帧把它放在挡板上方,所以球会跟着挡板移动,而一个 bool 会记住球是否已经飞出:

void Update()
{
    if (launched) return;
    transform.position = paddle.position + Vector3.up * 0.5f;
}

球的 Rigidbody 没有重力,因此只需设置一次速度,它就会一直沿直线飞行。wasPressedThisFrame 仅在按键按下的那一帧为 true,所以要在 Update() 中读取它。要让球以精确的速度朝任意方向飞行,先用 .normalized 将方向向量的长度设为 1,再进行乘法运算:new Vector3(3f, 4f, 0f).normalized * 10f 会让球以每秒 10 个单位的速度飞行。

challenge icon

挑战

简单

球会一直停在挡板上,直到按下空格键发射。

  1. 在 Ball 中,添加 bool launched; 和 public void Launch(Vector3 direction):launched = true; 和 rb.linearVelocity = direction.normalized * speed;
  2. 在 Update() 中,如果球已发射,就返回;否则,将球放在 paddle.position + Vector3.up * 0.5f 处。
  3. 当空格键 wasPressedThisFrame 时,调用 Launch(new Vector3(0.3f, 1f, 0f))。

按“开始”,移动挡板,然后按空格键:球会向上飞,并停在第一面墙上(接下来会添加反弹)。然后按“检查”。

亲手试试

using UnityEngine;
using UnityEngine.InputSystem;

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

    Rigidbody rb;

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

    // 接下来:球会停在球拍上,直到按下 Space 将它发射出去。
}

Unity 游戏:打砖块中的所有课

自己练习: Unity 在线编辑器