弹珠高尔夫
本课属于 Coddy Unity 学习旅程的“物理与游戏玩法”单元。第 68 课,共 71 课。
在一小片果岭上用弹珠打高尔夫。弹珠从发球区开始:用方向键瞄准,按住 Space 键积攒力量,松开即可击球。弹珠会滚动,撞到缓冲垫和中间的方块后反弹,然后逐渐减速,速度足够慢时就会停下。只有停下后,你才能再次击球。弹珠慢慢滚进球洞时会落入其中;如果速度太快,就会直接滚过球洞。击球次数越少越好。
编写两个脚本:放在弹珠上的 Golf 和放在球洞上的 Hole。
挑战
困难编写高尔夫球的控制逻辑:瞄准、蓄力、击球。
- 使用原始 Horizontal 轴和
aimSpeed调整瞄准角度aim;将pointer放在transform.position + Quaternion.Euler(0f, aim, 0f) * Vector3.forward处。 - 静止时(速度低于
stopSpeed),按住 Space 可按chargeRate增加power,直到达到maxPower;松开按键时,沿瞄准方向施加冲量,将power重置,并记录"Stroke " + strokes。 - 在
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 在线编辑器