博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Unity】坑爹的Bug
阅读量:4085 次
发布时间:2019-05-25

本文共 1129 字,大约阅读时间需要 3 分钟。

  • 1.【Mac/Windows下程序闪退】平时每天项目打包测试都好用,今天打的Mac包,闪退,点开就会立即关闭….打到Windows上也不行,后来发现是因为选了一个错误的选项,上图吧

    这里写图片描述

  • 2.【场景互相跳转之后内存增加】关于内存优化的一个问题,一般大家的项目里都会有多个场景,比如在A场景,内存占用100M,切换到B的时候,Unity会主动的帮我们做一些事情,比如释放一些资源,回收一些垃圾,虽然C#自称非常NB可以自动回收垃圾,但是所有语言如果有回收机制那么我想,大概也都是相同的原理,就是当某个“对象”没有引用的时候,才会被回收,Unity的很多回收机制都不是立刻执行的,先不说这个…先说问题吧,切换到B场景的时候,Unity会主动的帮我们释放A中的资源,但是如果你将资源加载到了内存中,并且对这个内存中的资源保有引用的话,假如说用AssetBundle加载了20M的图片,这些图片都被用到了一些地方,那么从场景A—–>场景B,这20M就不会被释放,如果场景B自身大小100M,那么切换过来就会变成120M,然后反复这样操作,B–>A–>B,就会变成140M….出现这样的问题就是因为我们太过信赖Unity和C#的回收机制,Image的引用和Int、String、Char这样的数据类型不同,C#语法中有析构函数,但是在Unity中奇怪的是,当你从A–>B中,可能正常人都会觉得A中的数据应该被释放掉,当然我也是这么认为的,其实并不是,A到B的切换,A中所有函数都不会触发析构函数,那什么时候触发呢,答案再次切换场景的时候!对…就是A–>B–>C,就是你到C场景了,才会触发A中的析构函数,但是OnDestroy()这个函数是真真切切的会在场景销毁的时候自动的调用,所以大家需要把那么希望被释放掉的资源加上可以被回收的“标记”,也就是置成null,当一个对象失去引用的时候,才能真正的被回收~ 但是在Unity中开发需要注意的是,如果这个对象是从可见的变成不可见的状态,那么要细心一点了,这个时候不会触发OnDestroy(),所以你的手动取消引用可能就不灵验了~ 如果有特殊的需求记得使用OnDisable(),取消引用

  • 3.【Unity程序在Windows下闪屏】因为我们几个人都用Mac开发,所以平时测试也都是打Mac的包测试,后来某一天不知哪位小伙伴改了平台的设置,因为是配置文件,格式是asset,所以上传了之后大家也不知道改了什么….
    但最后还是找到了原因就是PlayerSetting中的一些配置,导致了在Windows下闪屏,但是在Mac下是完全正常的就是图上红色的那两个,看看是不是和你的一样,如果是这样大概就是因为选了这个,所以错了……..
    这里写图片描述
你可能感兴趣的文章
FMDB的使用
查看>>
UIImage存为本地文件与UIImage转换为NSData
查看>>
[转]打印质数的各种算法
查看>>
[转]javascript with延伸的作用域是只读的吗?
查看>>
php的autoload与global
查看>>
IE不支持option的display:none属性
查看>>
[分享]mysql内置用于字符串型ip地址和整数型ip地址转换函数
查看>>
TableDnd(JQuery表格拖拽控件)应用进阶
查看>>
[转]开源中最好的Web开发的资源
查看>>
Https加密及攻防
查看>>
Java生成随机不重复推广码邀请码
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
String类的intern方法随笔
查看>>
【泛型】一个简易的对象间转换的工具类(DO转VO)
查看>>
1.随机函数,计算机运行的基石
查看>>
MouseEvent的e.stageX是Number型,可见as3作者的考虑
查看>>
在mc中直接加aswing组件,该组件还需最后用validate()方法
查看>>
移植Vim配色方案到Eclipse
查看>>
从超链接调用ActionScript
查看>>