解密神庙逃亡类跑酷游戏地图无限的原因
1.无限之谜
众所周知,跑酷类游戏像神庙逃亡给玩家的一种感觉就是地图无限多。有人说神庙逃亡跑1亿分就结束了,但这些其实都是假象,在程序猿眼中,这些人都是无知的。
这是一个最简单的跑酷游戏地图,一款无限地图的游戏,实际上的地图只有数块甚至更少,而地图无限的秘诀在于将地图一块一块的从后往前挪。
public void changeRoad(Transform MonitorPos){int index = MonitorPosList.IndexOf(MonitorPos);if (index >= 0){int lastIndex = index - 1;if (lastIndex < 0)lastIndex = roadList.Count - 1;roadList[index].position = roadList[lastIndex].position + new Vector3(roadDistance, 0, 0);for (int i = 0; i < 9; i++){Spawn_Obstacle(i);}}else{Debug.LogError("MonitorPos index is error");return;}}
这是挪用地图的代码。
在每一块路的子类中有一个不可视的空气墙,当我们的人物触碰到空气墙时,程序便会将后面的一块路转移到最前面,于是你便获得了无限的路。
2.地形变化之谜
有人可能会说,哪为什么路上的障碍物以及一些转向会变得不同。
public void Spawn_Obstacle(int index){GameObject[] obsPast = GameObject.FindGameObjectsWithTag("Obstacle" + index);for (int i = 0; i < obsPast.Length; i++){Destroy(obsPast[i]);}foreach (Transform item in m_ObstaclePosArray[index]){GameObject prefab = m_ObstacleArray[Random.Range(0, m_ObstacleArray.Length)];Vector3 eulerAngle = new Vector3(0, Random.Range(0, 360), 0);GameObject obj = Instantiate(prefab, item.position, Quaternion.Euler(eulerAngle));obj.tag = "Obstacle" + index;}}
这是一段将物体删除并随即生成的代码,所以可想而知为什么每段路都会有所不同,路实际上是同一条路,但实际上会将障碍物用随机的方法重新生成。
3.尾声
在下一篇文章中我将会介绍一款steam上的“热门”游戏的同类制作方法。
如果本篇文章有什么问题,还请斧正。