发射
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 个单位的速度飞行。
挑战
简单球会一直停在挡板上,直到按下空格键发射。
- 在
Ball中,添加bool launched;和public void Launch(Vector3 direction):launched = true;和rb.linearVelocity = direction.normalized * speed; - 在
Update()中,如果球已发射,就返回;否则,将球放在paddle.position + Vector3.up * 0.5f处。 - 当空格键
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 在线编辑器