美文网首页
Unity probelem

Unity probelem

作者: 东方小白 | 来源:发表于2021-12-27 09:47 被阅读0次

    1.如何关闭协程?
    在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。

    1.StartCoroutine("test");
      StopCoroutine("test");
    2.StartCoroutine(test());
      StopCoroutine(test());
    3.StopAllCoroutines();
    

    2.协程对象被销毁 是否会结束?
    找不到处理的对象会报错。
    3.协程要是死循环 也会卡死?
    会卡死。
    4.如何降低drawcall?
    批处理;
    动态合批:不需要操作,同一材质,unity自己会处理,但是限制多,最多顶点数900个的网格,大于的话无法处理,如果包括了顶点 法线 纹理等,顶点数不能超过300.多pass的shader也会中断动态合批.
    静态合批:同一材质,但是不能移动,内存会增加。
    5.ab包加载 的时机?
    什么是ab包,资源音频等打成一个个ab包,然后加到对应的位置,主动调用。
    6.包体优化?
    包体大小控制,比如定在控制在200m以内。
    图片、音频、视频、字体等压缩,保留必要资源,其他的场景、玩法资源走ab包加载。
    图片对应的压缩压缩,按照2的次幂大小,达成合图,分成功能图集,公用图集等。是否使用透明度,是否使用mipmap这些。
    压缩方式:ios使用pvrtc,pc使用dxt5,android使用etc2.
    音频的话:是否使用单声道。
    字体:保证常用的字体大小。
    7.awake start 时机?
    Awake——>OnEnable–>Start——>Update——>FixedUpdate——>LateUpdate——>OnGUI——>OnDisable——>OnDestroy
    8.update fixupdate lateupdate?

    MonoBehaviour.Update 更新
    当MonoBehaviour启用时,其Update在每一帧被调用。
    
    MonoBehaviour.FixedUpdate 固定更新
    当MonoBehaviour启用时,其 FixedUpdate在每一帧被调用。
    
    处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)
    
    MonoBehaviour.LateUpdate 晚于更新        
    当Behaviour启用时,其LateUpdate在每一帧被调用。
    
    LateUpdate是在所有Update函数调用后被调用。这可用于调整脚本执行顺序。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。
    

    9.A脚本早于 b脚本执行?
    设置脚本的执行顺序。
    10.不透明 和半透明的渲染顺序?
    西安许安然不透明的,避免不透明的挡住了透明的。
    backgroud:2000
    transparent:2450
    opaque:3000
    overlay:5000
    11.Animation 和 animator?
    animation属于老的动画系统,animator是新的动画系统,可以使用状态机来编辑动画。
    12.forwardbase说说?
    基本的渲染光照模型,主要是平行光和点光源的渲染。
    13.图片资源优化?
    1.图片的合图打成2的次幂;
    2.使用正确的压缩算法;
    3.打成ab包加载;

    14.ab包如何释放 和加载 唯一性 相互关联的?
    ab包加载到内存里面就可以释放,将ab包分隔的细致,保证之间没有相互引用。
    ab包资源直接会有一个依赖表。
    15.多线程的同步?
    多线程直接会有消息通信,通过加锁来保证资源的正确性。
    16.unity 插件?
    很多。比如动画的dotween,leantween,tween,itween.localization.
    17.新特性?
    18.gameobject和prefab
    可以说所有的控件都是gameobject,
    19.ref参数和out参数是什么?有什么区别?

    ref和out参数的效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址,并通过方法体内的语法改变它的大小。
    不同点就是输出参数必须对参数进行初始化。ref必须初始化,out 参数必须在函数里赋值。ref参数是引用,out参数为输出参数。
    

    20.什么叫动态合批?跟静态合批有什么区别?

    如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。动态批处理操作是自动完成的,并不需要你进行额外的操作。
    
    区别:动态批处理一切都是自动的,不需要做任何操作,而且物体是可以移动的,但是限制很多。
    静态批处理:自由度很高,限制很少,缺点可能会占用更多的内存,而且经过静态批处理后的所有物体都不可以再移动了。
    

    21.简述StringBuilder和String的区别?

    String是字符串常量。
    
    StringBuffer是字符串变量 ,线程安全。
    
    StringBuilder是字符串变量,线程不安全。
    
    String类型是个不可变的对象,当每次对String进行改变时都需要生成一个新的String对象,然后将指针指向一个新的对象,
    如果在一个循环里面,不断的改变一个对象,就要不断的生成新的对象,所以效率很低,建议在不断更改String对象的地方不要使用String类型。
    
    StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能。
    这一点我们平时使用中也许都知道,连接操作频繁的时候,使用StringBuilder对象。
    

    22.TCP和UDP还有http的理解?
    tcp和udp都是网络通信协议,分成长连接和短连接。一般对于实时网络连接不强的可以使用http连接,比如棋牌,如果要求实时性的话,比如rpg,mmo那使用tcp或者udp。
    tcp每个包都需要回包,udp只会发出去不需要每个包都会回包。
    kcp,稳定的tcp。
    23.UGUI NGUI ONGUI FairyGUI的理解?
    UGUI是Unity自带的UI框架,Ngui是一个插件,他有自己的渲染方式。
    ongui主要用来做编辑器的开发,每帧调用,效率过低。
    fairygui对于美术友好,可以让美术拼接好,程序负责逻辑实现。
    24.编辑器的开发?
    编辑器的开发主要使用ONGUI,做一些插件等的功能。
    25.shader的使用?
    一个材质对应一个shader,来对ui进行控制来实现一些定制化的需要。比如后处理效果,pbr的效果等。
    利用shader实现动画等。
    26.后处理效果知道吗?
    在渲染的最后对成像进行一些处理,比如bloom,边缘检测、高斯模糊,npr效果,雾效等。
    27.PBR知道吗?
    基于物理材质的渲染。
    28.SRP和HDRP了解吗?
    SRP可编程的渲染管线。
    Scripting Rendering Pipeline
    HDRP 高清渲染管线。
    29.光照说一下?
    lightmode:forward defered.forward:forwardbase forwardAdd
    30.Alpha Test和Alpha Blend说一下?
    Alpha Test alpha检测,clip 要么是透明,要么就是不可见。
    Alpha Blend透明度混合,颜色混合到一起,可以透过透明度来看。
    31.用过哪些设计模式说下?
    框架的mvc分离,但是代码之间会比较耦合,mvvm model view viewModel
    32.对象池的使用?
    对于重复创建和大量使用的东西创建对象池,避免频繁的创建和使用。
    33.AssetBundle如何使用的,时机是什么?
    ab包主要是打包大批量的资源文件,可以实现动态加载。
    34.UI是如何管理的?
    通过统一的UImanager统一管理。初始化的时候创建UIManager的管理对象,后面使用界面的时候注册到这个单例对象里面来管理。
    35.网络通信是怎样的?
    网络通信主要同过tcp或者udp,tcp相对于udp比较稳定,等到回包之后才继续发送下一个包,会有等待,但是会阻塞,网络不稳定的时候可能会卡住。对于延迟要求比较大的游戏使用udp,如果不用那么实时的可以使用tcp,比如卡牌,棋牌游戏。
    udp的话不会校验包,只管发送,如果没有接收到回包,后面会重复发送,对于实时要求比较高的游戏,使用udp比较好,比如王者荣耀,枪战类型游戏。
    kcp,是可信任的udp.
    36.断线重连的机制?
    当心跳包长时间没有,没有回应的时候,会重新走tcp udp连接的逻辑。
    37.热更制了解吗?ILRuntime、ToLua 、Xlua都了解吗?
    不需要重新下载包体,可以在当前包得到最新的游戏内容的更新叫做热更新。纯c#的更新有个事ILRuntime.
    通过脚本的更新有ToLua和XLua.
    38.粘包如何处理?
    粘包了,可以重新在发送。
    39.内存管理?
    内存创建了,在销毁界面的时候一起销毁。
    固定时间销毁。
    40.垃圾回收机制?
    内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程。
    要想了解垃圾回收如何工作以及何时被触发,我们首先需要了解unity的内存管理机制。Unity主要采用自动内存管理的机制,开发时在代码中不需要详细地告诉unity如何进行内存管理,unity内部自身会进行内存管理。这和使用C++开发需要随时管理内存相比,有一定的优势,当然带来的劣势就是需要随时关注内存的增长,不要让游戏在手机上跑“飞”了。


    image.png

    参考1:Unity中的 GC及优化 超级全面解析 ☆(ゝω・)v 建议收藏!

    相关文章

      网友评论

          本文标题:Unity probelem

          本文链接:https://www.haomeiwen.com/subject/votyqrtx.html