2D横版游戏无缝加载及存档点的简易实现

 

无缝加载一般适用于地图较大的游戏,即仅加载我们看得到的地图,如果走远,这个地图就会被释放,虽然Unity优化很好,看不到的不会被渲染,但是内存仍然是有占用的,用无缝加载能大大减少场景占用的内存,这里我只讲比较简单的2D的无缝加载。...



无缝加载,一般适用于地图较大的游戏,即仅加载我们看得到的地图,如果某个地图离玩家太远了,那么这个地图就会被释放,虽然Unity优化很好,看不到的不会被渲染,但是内存仍然是有占用的,用无缝加载能大大减少场景占用的内存,这里我只讲比较简单的2D的无缝加载,3d的数据量大,要比较复杂,大家如果感兴趣可以搜索下“四叉树”。

先讲一下大概的思路:每个关卡,即scene,存在一个起始点,一个终点,和若干个存档点,起始点和终点其实也是个存档点,但是他们多了加载(释放)场景的功能。

大概的排列如图所示:



我的场景命名是 “0”“1”“2”“3”这样的,大家也可以建立一个字符串数组来进行对应。

每个场景中都有一个命名和场景号相同的物体,检查点为其子物体。



首先,我定义了LoadScene和UnloadScene这两个函数,sceneList记录了已加载的场景序号,用来进行各种检查。

在LoadScene里,因为场景是可以重复加载的,所以要先检查sceneList里是否已包含以避免重复,同时将异步信息放入一个list中以方便检查是否全部加载完毕。



在起始点中,我们加载下一个关卡,更新存档点及场景号,这里lastscenenum指的是最大关卡数,cpSceneNum即存档点的场景序号,avSceneNum即玩家达到的最大关卡号
检测点代码。



levelmanager里的内容



在存档点中,进行简单的位置更新。



在终点,销毁之前的所有场景,注意,销毁场景的操作不能在OnTriggerEnter2D里完成,所以我建了一个list,把待销毁的场景号存起来,然后在下一帧销毁。

检测点代码



levelmanager里的内容



点击原文链接下载原文件哦~

▶Hello Vuforia——涂涂乐之美术篇

▶HoloLens开发手记 - HoloLens shell概述

▶5秘诀让你更专注游戏开发



蛮牛社区(manew.com)分享最新的游戏研发和虚拟现实相关技术内容。


    关注 游戏蛮牛


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册