zoukankan      html  css  js  c++  java
  • 团队项目记录3

    遇到的问题:不同场景储存统一信息

    问题描述:一个Unity程序中包含多个场景,一个场景包含各种物体,场景是最小的组织单位,所有的物体都是在一个场景中被渲染并与玩家交互。在本游戏中,每个关卡对应一个场景,而过关时的动作就是进行场景的切换来进入下一关。为了提高代码的可重用性(即减少脚本的数量),我们不可能对每一个场景(即每一关)都单独编写一个脚本来载入下一关。相反,我们定义了一个UImanager类,用来存储和控制当前所在关卡,并定义了函数来实现载入下一关。但是实际使用的时候,却发现过关时并没有跳到下一关而是回到了第一关。发生这个问题的原因就在于每个场景都存在一个UImanager实体,而载入场景的时候会载入该场景内的UImanager,而UImanager的level初值就是第一关,所以会从第一关开始。所以此时要将多余的UImanager删除,只保留菜单中的UImanager,同时用DontDestroyOnLoad指定读取新场景时不删除这个物体。然而这样做之后,还有另一个问题需要解决,就是当我们从一个关卡中返回主菜单时,由于重新读取了主菜单这个场景,UImanager又被载入了一遍,而且由于我们使用了DontDestroyOnLoad指定了读取新场景时不删除这个物体,所以此时会有两个UImanager同时存在,如果再返回主菜单则会出现第三个,以此类推无穷无尽,不仅浪费资源,还会产生致命bug。

    解决办法:对于最后一个问题的解决方法其实十分简单粗暴,在每一个UImanager的初始化函数Start()中寻找相同类型的物体,如果找到的话则将找到的所有相同类型的物体删除掉,如此一来就解决了UImanager唯一性冲突的为题,算是一种广义的singleton的实现吧。

  • 相关阅读:
    前端(基础篇)
    面向对象
    python(进阶篇)
    Python(基础篇)
    pycharm中添加python3 的环境变量
    MySQL与MongoDB的不同
    pycharm中添加python3 的环境变量
    ContentType&CORS&Git
    RESTful 组件
    Django REST_framework Quickstart
  • 原文地址:https://www.cnblogs.com/ACskyline/p/5603923.html
Copyright © 2011-2022 走看看