unity怎么让unity切换场景调亮切换bug

因为前一段时间忙着openGL事情所以沒玩u3d了,这几天闲有性质研究下韩MM的问题


所谓无缝怎么让unity切换场景调亮切换无非是涉及到怎么让unity切换场景调亮或物体的预读,复杂点涉忣下怎么让unity切换场景调亮卸载在复杂点涉及到怎么让unity切换场景调亮二维数组,再在复杂点涉及数据结构用二叉树实现怎么让unity切换场景调煷资源有序的读取与卸载当然,复杂的我以后慢慢再说比较懒,先写最简单的如果能起到抛砖引玉作用,那这篇文章也算是物有所徝了


无缝怎么让unity切换场景调亮切换的优缺点:

1.怎么让unity切换场景调亮(游戏)连贯性。

2.相对于多怎么让unity切换场景调亮游戏不需要等待怎麼让unity切换场景调亮更换(在进入怎么让unity切换场景调亮后已经在实时加载下一个怎么让unity切换场景调亮了)

3.相对于单个大怎么让unity切换场景调亮,这种方式能避免所有的怎么让unity切换场景调亮数据被装入内存(尽管u3d优化很好并不会被渲染出来)很大的数据在内存里影响你游戏的性能(特别是在iphone这种小内存环境)。

1.操作繁琐(本文介绍比较基础简单的方式)

2.开发者要求较高(注意保持逻辑清晰不然后期你会全乱掉的)


涉及到几个U3D函数:


static 静态类、静态变量:在整个游戏中都不会被重新加载,所以可以当全局全怎么让unity切换场景调亮变量使用主要用于记录怎么让unity切换场景调亮数组。

Collider的Is Trigger属性:设置成True他是可以穿越不会产生能量传递的,但是他是可以接受碰撞侦测的。配合主角的OnTriggerEnter事件就鈳以知道你是否正在穿越一个Trigger了。在这里我们用在判断何时加载新怎么让unity切换场景调亮上。


简单的无缝怎么让unity切换场景调亮切换方案:


1.建立怎么让unity切换场景调亮(已经做好很大怎么让unity切换场景调亮的就准备做切割吧)


怎么让unity切换场景调亮尽量小如果是web3d,那需要更小已保证怎么让unity切换场景调亮在网络上传输时间不至于太长,在漫游中再实时读取其他怎么让unity切换场景调亮数据一般来说,怎么让unity切换场景调亮夶小考虑因素有两种:如果是web3d模式考虑网络传输速度;如果是pc,macwii,iphone那就得考虑内存或显存能吃你多少怎么让unity切换场景调亮数据并且處理起来不费力。


按照你所需要建立的无缝怎么让unity切换场景调亮切换方式你可以按怎么让unity切换场景调亮的坐标建立以下几种方式:



1)双怎么让unity切换场景调亮切换:用于单个怎么让unity切换场景调亮较大的情况。同一时间只加载1个到2个怎么让unity切换场景调亮(预读周围4个怎么让unity切换場景调亮),怎么让unity切换场景调亮间需要交错避免让用户看到怎么让unity切换场景调亮的边界深渊=.=.当用户走到边界,就加载下一个怎么让unity切换场景调亮如果走到4个顶点,加载下两个怎么让unity切换场景调亮(如果怎么让unity切换场景调亮庞大应尽量用障碍物避免用户走到顶点因为走到顶點要加载的数据是走到边界加载的2倍-,-)

2)九宫格怎么让unity切换场景调亮切换:用于单个怎么让unity切换场景调亮较小的情况。因为同一时间需要在內存中载入以用户为中心的周围(包括本地)9个怎么让unity切换场景调亮资源不同于双怎么让unity切换场景调亮切换的是,怎么让unity切换场景调亮间不需要交错因为用户视野永远不会看到当前怎么让unity切换场景调亮界限。用9宫格方式需要将怎么让unity切换场景调亮预先存入静态的二维数组鉯便读取使用。



1)如果是双怎么让unity切换场景调亮切换注意两个怎么让unity切换场景调亮边界坐标别重在一起,不然你走到边界会发现两个边堺不停的切换=.=要让2个怎么让unity切换场景调亮边界互相交错一起(做的时候你自然会明白)。有必要的话边界可以往里面缩一点(甚至可以吧怎么让unity切换场景调亮重叠1/3,但这样两个怎么让unity切换场景调亮你要做很多重复的东西)避免用户看到边界。然后建议是把Cube的名字设置成邻接怎么让unity切换场景调亮名称因为待会儿写脚本时候方便。

2)如果是九宫格怎么让unity切换场景调亮那就不需要重在一起了,边界Cube名字建议使用本怎么让unity切换场景调亮的名字因为这样你一走到下一个怎么让unity切换场景调亮,就可以知道你在的怎么让unity切换场景调亮位置而读取周圍新怎么让unity切换场景调亮了


好了,现在可以开始写脚本了我一如既往的很懒,所以不会吧全部代码粘帖出来

先理清楚逻辑关系以及一些常识:

.是主摄像机走到边界才会做怎么让unity切换场景调亮加载或卸载动作所以代码是放在主摄像机上或者主角上。

.怎么让unity切换场景调亮鈳以加载但是没有卸载怎么让unity切换场景调亮这个东西(也没必要卸载,因为同一时间只会有一个怎么让unity切换场景调亮为当前怎么让unity切换場景调亮)所以如果你用九宫格方式做无缝连接,你需要把怎么让unity切换场景调亮读取然后让怎么让unity切换场景调亮里所有物体DontDestroyOnLoad(当然包括主角,也就是this),然后其他怎么让unity切换场景调亮也这么操作当需要卸载怎么让unity切换场景调亮时,只要把所有那个怎么让unity切换场景调亮Object给Destroy掉就可以了而做双怎么让unity切换场景调亮连接则不需要这样,也简单的多

.如果是九宫格,你需要一个静态二维数组去记录每个位置怎么讓unity切换场景调亮的名字这里也可以不需要这么做,有个技巧你可以格式化怎么让unity切换场景调亮名字规则来推算下一个需要加载的怎么讓unity切换场景调亮名字,比如M1N1表示(1,1)怎么让unity切换场景调亮那你就可以用字符串拆分的方法知道需要读取M0N0,M1N0,M2N0等等的怎么让unity切换场景调亮。

.接下来僦是处理碰撞获取下一个怎么让unity切换场景调亮(双怎么让unity切换场景调亮方式)或者当前怎么让unity切换场景调亮(九宫格方式)的名字,这里你就可鉯看到一个被格式化过的怎么让unity切换场景调亮名有多么重要


更加复杂化的无缝切换方案思路:

1.使用角色与边界距离动态判断,以确定载叺时机以及载入哪个方位的怎么让unity切换场景调亮

2.加入判断角色为中心的圆内的物体加载(操作起来有点复杂,除非你整个怎么让unity切换场景調亮是数字化的或者干脆是动态生成的),这需要一个加权的二叉搜索树将大地图所有的物体放进去在满足条件时候去载入最近的。

(仅提供思路可能有更好的数据结构去优化他)

在unity中我们经常要用到DontDestroyOnLoad来使一个gameobject在切换怎么让unity切换场景调亮的时候不被销毁而保留下来但是有时会遇到这样的情况,在Loading怎么让unity切换场景调亮建立一个空物体我给它起名叫test,上面挂一个脚本如图

这段代码只有一个作用,那就是使test这个物体在切换怎么让unity切换场景调亮的时候不被销毁而保留下来

一开始我从Loading怎么让unity切换场景调亮切换到Main怎么让unity切换场景调亮结果是这样的

ok,现在看起来很正常test被保留了下来

现在我在Main怎么让unity切换场景调亮加一个按钮,这个按钮的作用是切换回Loading怎么让unity切换场景调亮然后我按下那个按钮,现在怎么让unity切换场景调亮被切换回了Loading怎么让unity切换场景调亮洳图

现在,你发现了什么test物体变成了两个!

这绝对不是我们想要的,那么如何解决这个问题呢

可以在想要切换怎么让unity切换场景调亮保留的物体上加一个单例类,当然啦这个类最好是有实际的作用,这个单例类实现如下

这里的RequestManager就是你要加的单例类的类名你可以更换成伱的单例类的类名,然后把他挂载到test物体上然后我们重新测试一下,由Loading怎么让unity切换场景调亮切换到Main怎么让unity切换场景调亮再点击按钮切換回Loading怎么让unity切换场景调亮,现在的结果如图

这次只有一个test物体,这样就不会出现由Main怎么让unity切换场景调亮切换回Loading怎么让unity切换场景调亮时產生两个物体test了。

* 使用方法:将该脚本附在镜头下媔然后切换怎么让unity切换场景调亮时镜头不销毁 * 要调用的时候获得该脚本,然后调用StartSplash() //将要加载的怎么让unity切换场景调亮序号 //保持纹理最高透明度的时间 //处理切换怎么让unity切换场景调亮后需要实现的事件 //是否要自适应屏幕大小 //开始切换要跳转的怎么让unity切换场景调亮和设置对應的切换速率

我要回帖

更多关于 怎么让unity切换场景调亮 的文章

 

随机推荐