解密神庙逃亡类跑酷游戏地图无限的原因

解密神庙逃亡类跑酷游戏地图无限的原因

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上的“热门”游戏的同类制作方法。
如果本篇文章有什么问题,还请斧正。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值