三条跑道
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,因此不会移到最左侧车道之外。
挑战
简单让跑步者在三条跑道之间移动。
- 在
Runner.Update中,按下 A 或左箭头时(Input.GetKeyDown),设置lane = Mathf.Max(-1, lane - 1)。 - 按下 D 或右箭头时,设置
lane = Mathf.Min(1, lane + 1)。 - 然后像上面那样计算
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 在线编辑器