大炮射程
本课属于 Coddy Unity 学习旅程的“物理与游戏玩法”单元。第 66 课,共 71 课。
一门大炮架在射击场的一端,三个靶子在不同距离处横向来回移动。你可以上下调整炮管,瞄准不同距离的靶子,并在靶子经过射击线时开火。炮弹命中靶子后,会将其击落并消耗掉;其他任何撞到靶子的东西都不会影响它。靶子是运动学刚体,因此命中不会推动它们,大炮有 5 颗炮弹。
编写两个脚本:将 Cannon 挂载到 Barrel 上,将 Target 挂载到每个靶子上。
挑战
困难编写大炮:瞄准,然后发射 5 个球。
- 在
Update()中,将Input.GetAxisRaw("Vertical") * turnSpeed * Time.deltaTime加到angle上,将它限制在 10 到 60 之间,并设置transform.rotation = Quaternion.Euler(-angle, 0f, 0f);。 - 按下 Space 且
balls > 0时,在transform.position + transform.forward处生成ballPrefab,并调用AddForce(transform.forward * power, ForceMode.Impulse)。 - 将
balls减 1,并记录"Balls left: " + balls。
按下“开始”并开火。然后点击“检查”。
亲手试试
using UnityEngine;
public class Cannon : MonoBehaviour
{
[SerializeField] private Rigidbody ballPrefab;
[SerializeField] private float angle = 30f;
[SerializeField] private float turnSpeed = 40f;
[SerializeField] private float power = 30f;
[SerializeField] private int balls = 5;
void Update()
{
// 用上下方向键瞄准,按 Space 发射
}
}
物理与游戏玩法中的所有课
自己练习: Unity 在线编辑器