Menu
CoddyTech

三条跑道

Coddy Unity 游戏:天空赛道 课程的第 1 课,共 21 课。

在这门课程中,你会完成一个完整的游戏,每节课添加一个功能。“开始”会运行游戏,“检查”会为你的代码评分。一个跑步者在高空的道路上奔跑。路上会出现障碍物、横杆和墙壁,各条车道上排列着金币,而且你坚持得越久,道路就会变得越快。

项目已经有四个脚本:玩家对象上的 Runner、Road、GameManager 和 Coin。目前大多数脚本都是空的,会随着每节课逐步填充。还有第五个脚本 CameraFit,它挂在摄像机上,已经准备好了:它会在竖屏手机上扩大视野,让三条车道都能显示出来,你不需要修改它。

跑步者不会向前移动,只会在三条车道之间移动:左侧、中间和右侧。用整数 -1、0 或 1 表示车道,并算出它在 x 轴上的位置:

float targetX = lane * laneWidth;

跑步者有一个 CharacterController,因此它通过 controller.Move(motion) 移动:Move 接收的是这一帧要移动的距离,而不是要到达的位置。要移动到 targetX,需要移动当前位置与它之间的差值:

float targetX = lane * laneWidth;
Vector3 move = new Vector3(targetX - transform.position.x, 0f, 0f);
controller.Move(move);

Mathf.Max(-1, lane - 1) 的结果是 lane - 1,但不会小于 -1,因此不会移到最左侧车道之外。

challenge icon

挑战

简单

让跑步者在三条跑道之间移动。

  1. 在 Runner.Update 中,按下 A 或左箭头时(Input.GetKeyDown),设置 lane = Mathf.Max(-1, lane - 1)。
  2. 按下 D 或右箭头时,设置 lane = Mathf.Min(1, lane + 1)。
  3. 然后像上面那样计算 targetX,并用 controller.Move 将跑步者移动到那里。

按下“运行”,再按 A 和 D:跑步者会在三条跑道之间跳动。然后点击“检查”。

亲手试试

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;

    public int lane;

    private CharacterController controller;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        // 在这里切换跑道
    }
}

Unity 游戏:天空赛道中的所有课

自己练习: Unity 在线编辑器