Menu
CoddyTech

接星者

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 50 课,共 85 课。

这一章会用每节课添加一个功能的方式,制作一款名为 Catch the Star 的小游戏:星星会落下,你可以在它下方左右移动接星器;每接住一颗星星就得分,并且下一颗星星会落得更快;漏接 3 次后游戏结束。所有功能都写在接星器上的同一个脚本 Catcher 中。第一个功能是移动:接星器会随着方向键左右移动,而且不会离开地面。

要让一个数字保持在限制范围内,可以使用 Mathf.Clamp(value, min, max)。如果值小于 min,它会返回 min;如果值大于 max,它会返回 max;否则会返回这个值本身。下面的摄像机会跟随玩家登上高塔,但高度会保持在 2 到 12 之间:

[SerializeField] private Transform player;

void Update()
{
    float y = Mathf.Clamp(player.position.y, 2f, 12f);
    transform.position = new Vector3(transform.position.x, y, transform.position.z);
}

Clamp 会返回一个新数字,本身不会改变任何内容,因此要把结果赋值。完成这一帧的所有更改后、写回位置前,再进行 Clamp,这样物体就不会在任何一帧中超出限制。

challenge icon

挑战

中等

让接球器,也就是蓝色横条,动起来。

  1. 在 Update() 中,将 transform.position.x 复制到 float x,然后根据按住的方向键,加上或减去 speed * Time.deltaTime。
  2. 让宽 2 个单位的接球器保持在地面上(x 范围从 -5 到 5):x = Mathf.Clamp(x, -4f, 4f);。
  3. 将 x 写回 transform.position,并保留 y 和 z。

按“开始”并按住方向键:接球器会在边缘停下。然后点击“检查”。

亲手试试

using UnityEngine;

public class Catcher : MonoBehaviour
{
    [SerializeField] private float speed = 6f;

    void Update()
    {
        // 方向键:沿 x 轴滑动,速度为每秒 speed 个单位。
        // 让整个接球器保持在地板范围内(x 从 -5 到 5,接球器宽 2 个单位)。
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器