Menu
CoddyTech

大炮射程

本课属于 Coddy Unity 学习旅程的“物理与游戏玩法”单元。第 66 课,共 71 课。

一门大炮架在射击场的一端,三个靶子在不同距离处横向来回移动。你可以上下调整炮管,瞄准不同距离的靶子,并在靶子经过射击线时开火。炮弹命中靶子后,会将其击落并消耗掉;其他任何撞到靶子的东西都不会影响它。靶子是运动学刚体,因此命中不会推动它们,大炮有 5 颗炮弹。

编写两个脚本:将 Cannon 挂载到 Barrel 上,将 Target 挂载到每个靶子上。

challenge icon

挑战

困难

编写大炮:瞄准,然后发射 5 个球。

  1. 在 Update() 中,将 Input.GetAxisRaw("Vertical") * turnSpeed * Time.deltaTime 加到 angle 上,将它限制在 10 到 60 之间,并设置 transform.rotation = Quaternion.Euler(-angle, 0f, 0f);。
  2. 按下 Space 且 balls > 0 时,在 transform.position + transform.forward 处生成 ballPrefab,并调用 AddForce(transform.forward * power, ForceMode.Impulse)。
  3. 将 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 在线编辑器