关卡

本文将讲解如何构建关卡。先从“直线型道路”关卡开始。

Straight Paths Level

层级结构列表中的游戏对象:
 

 
Straight Paths Level中游戏对象的层级结构



所有的路径都是通过预制件(见上图蓝色的WideStraightPath)来复制的,直线型道路的路径要比旋转型道路更宽。场景中还有一些立方体状的3D对象(上图中的Cubes),作为路径的地板。另外还有一些简单的3D坐标,NewPathSpawn以及SpawnPoints。SpawnPoints用于指定生成新物体的位置,例如糖果、障碍物等。


为了节省内存资源,游戏不会在一开始就生成所有路径。实际上,游戏需要生成N+1条路径,N是当前Max所在的路径位置。可以利用一个简单的碰撞器BoxCollider,当Max与它发生碰撞, 则通过PathSpawnCollider脚本生成新路径。在直线型道路的关卡中,新生成的路径位于“NewPathSpawn”坐标,这个坐标就是当前路径的终点。
 

 
当玩家与PathSpawnCollider发生碰撞时,在NewPathSpawn位置生成新路径

 

 
NewPathSpawn的位置就是新路径的生成点


Character游戏对象下包含相机和Max模型,此外还有Character Controller 组件和CharacterSidewaysMovement脚本。通过该组件和脚本的控制,相机会始终保持在Max上方的位置,这是第三人称视角游戏中的常见角色控制方式。

Canvas包含两个文本对象。Directional Light就是很简单的平行光光照,ScriptHolder对象包含了本教程上半部分介绍的GameManager单例脚本。

PathSpawnCollider类——路径生成器

此脚本适用于两种关卡,主要功能是根据Max当前奔跑位置来生成下一段路径。
 

[C#] 纯文本查看 复制代码
public class PathSpawnCollider : MonoBehaviour {
 
    public float positionY = 0.81f;
    public Transform[] PathSpawnPoints;
    public GameObject Path;
    public GameObject DangerousBorder;
 
}



脚本首先设置了几个公共变量,可以在Unity编辑器中设置。

  • PositionY:用于将RedBorder放置到正确的Y轴位置。
  • 数组PathSpawnPoints:用于保存下一段路径及边界的生成坐标。在“直线型道路”关卡中,数组内只有一个元素。但“旋转型道路“关卡中,该数组需要3个元素,其中一个是新路径的位置,另外两个是RedBorder障碍物(Max一旦碰撞到它,则游戏失败)。
  • Path:物体包含路径预制件。
  • 数组DangerousBorder:包含了用于“旋转型道路”关卡的RedBorder预制件,在“直线型道路”关卡中为null。


 

[C#] 纯文本查看 复制代码
void OnTriggerEnter(Collider hit)
  {
      //player has hit the collider
      if (hit.gameObject.tag == Constants.PlayerTag)
      {
          //find whether the next path will be straight, left or right
          int randomSpawnPoint = Random.Range(0, PathSpawnPoints.Length);
          for (int i = 0; i < PathSpawnPoints.Length; i++)
          {

锐亚教育