奔跑者
本课属于 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 还会返回一个新数值,而不是更改你传入的变量,所以要把结果重新赋值给变量。
挑战
中等开始玩《躲避方块》:沿着跑道控制跑者。
- 在
Update()中,将transform.position复制到Vector3 p,并将Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime加到p.x上。原始轴输入会立即以全速移动。 - 设置
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 在线编辑器