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)分享最新的游戏研发和虚拟现实相关技术内容。
关注 游戏蛮牛
微信扫一扫关注公众号