Menu
CoddyTech

弹珠高尔夫

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

在一小片果岭上用弹珠打高尔夫。弹珠从发球区开始:用方向键瞄准,按住 Space 键积攒力量,松开即可击球。弹珠会滚动,撞到缓冲垫和中间的方块后反弹,然后逐渐减速,速度足够慢时就会停下。只有停下后,你才能再次击球。弹珠慢慢滚进球洞时会落入其中;如果速度太快,就会直接滚过球洞。击球次数越少越好。

编写两个脚本:放在弹珠上的 Golf 和放在球洞上的 Hole。

challenge icon

挑战

困难

编写高尔夫球的控制逻辑:瞄准、蓄力、击球。

  1. 使用原始 Horizontal 轴和 aimSpeed 调整瞄准角度 aim;将 pointer 放在 transform.position + Quaternion.Euler(0f, aim, 0f) * Vector3.forward 处。
  2. 静止时(速度低于 stopSpeed),按住 Space 可按 chargeRate 增加 power,直到达到 maxPower;松开按键时,沿瞄准方向施加冲量,将 power 重置,并记录 "Stroke " + strokes。
  3. 在 FixedUpdate() 中,静止时将两个速度都设为零。

按“开始”并推杆,然后按“检查”。

亲手试试

using UnityEngine;

public class Golf : MonoBehaviour
{
    public int strokes = 0;
    [SerializeField] private Transform pointer;
    [SerializeField] private float aimSpeed = 90f;
    [SerializeField] private float chargeRate = 4f;
    [SerializeField] private float maxPower = 6f;
    [SerializeField] private float stopSpeed = 0.3f;
    private Rigidbody rb;

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

    // 用方向键瞄准,按住 Space 蓄力,松开后击球,球速变慢时停止。
}

物理与游戏玩法中的所有课

自己练习: Unity 在线编辑器