Menu
CoddyTech

奔跑者

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

这一章会制作一个小游戏《躲避方块》。你要操控跑者沿着跑道移动,同时方块从天而降,碰到一次就会结束游戏。整个游戏由一个脚本 Runner 实现,每一课都会为它添加一个功能:操控移动、方块下落、清理方块、碰撞和计分。

第一个功能是让跑者始终在跑道上移动,这里会用到《接住星星》中的 Mathf.Clamp(value, min, max):当值小于范围时,它会返回 min;当值大于范围时,它会返回 max;否则就返回这个值本身。限制操作的位置很重要。这个蓄力计量条会在按住 Space 时增长,松开时减少,并始终保持在 0 到 10 之间:

[SerializeField] private float charge = 0f;

void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        charge += 4f * Time.deltaTime;
    }
    else
    {
        charge -= 2f * Time.deltaTime;
    }
    charge = Mathf.Clamp(charge, 0f, 10f);
    transform.localScale = new Vector3(0.5f, charge, 0.5f);
}

限制操作放在数值变化之后。如果先限制,数值在这一帧结束时可能会超出上限一步,计量条也会根据这个数值绘制。Mathf.Clamp 还会返回一个新数值,而不是更改你传入的变量,所以要把结果重新赋值给变量。

challenge icon

挑战

中等

开始玩《躲避方块》:沿着跑道控制跑者。

  1. 在 Update() 中,将 transform.position 复制到 Vector3 p,并将 Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime 加到 p.x 上。原始轴输入会立即以全速移动。
  2. 设置 p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);,然后设置 transform.position = p;。

按下 开始,点击游戏并跑到两端:跑者会停在边缘。然后点击 检查。

亲手试试

using UnityEngine;

public class Runner : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    [SerializeField] private float laneEdge = 4f;

    void Update()
    {
        // 用方向键沿 x 轴移动,然后让 x 保持在跑道范围内
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器