unity控制程序等待_unity涨姿势知识(技术题三)

本文深入探讨了Unity3D引擎在游戏开发中的应用,涵盖协同程序、碰撞检测、光照处理、资源管理和内存优化等多个核心知识点。通过实例解析了Unity3D中的关键概念,如使用协同程序控制程序等待、理解碰撞器与触发器的区别、物体碰撞的必备条件、ArrayList与List的区别、垃圾回收的原理等。同时,文章强调了在移动设备上进行性能优化的重要性,包括降低Draw Call、使用AssetBundle和动态加载资源等策略。此外,还介绍了Unity与Android、iOS的交互方法,以及如何在不同分辨率下保持UI一致性。文章最后讨论了Unity3D中的Shader技术,包括表面着色器、顶点片段着色器和固定功能管线着色器,帮助开发者更好地理解和应用Unity3D的图形渲染技术。
摘要由CSDN通过智能技术生成

一:什么是协同程序?

答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个可以与程序并行的逻辑。可以用来控制运动、序列以及对象的行为。

二:Unity3d中的碰撞器和触发器的区别?

答:碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。

当Is

Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;

当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。

如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器

三:物体发生碰撞的必要条件

答:两个物体都必须带有碰撞器Collider,其中一个物体还必须带有Rigidbody刚体。

四:请简述ArrayList和List的主要区别

答:ArrayList存在不安全类型

ArrayList会把所有插入其中的数据都当做Object来处理

装箱拆箱的操作

List是接口,ArrayList是一个实现了该接口的类,可以被实例化

五:请简述GC(垃圾回收)产生的原因,并描述如何避免?

答:GC回收堆上的内存

避免:

1)减少new产生对象的次数

2)使用公用的对象(静态成员)

3)将String换为StringBuilder

六:反射的实现原理?

答:审查元数据并收集关于它的类型信息的能力。

实现步骤:

导入using System.Reflection;

Assembly.Load("程序集");//加载程序集,返回类型是一个Assembly

得到程序集中所有类的名称

foreach (Type type in assembly.GetTypes())

{

string t = type.Name;

}

Type type = assembly.GetType("程序集.类名");//获取当前类的类型

Activator.CreateInstance(type); //创建此类型实例

MethodInfo mInfo = type.GetMethod("方法名");//获取当前方法

mInfo.Invoke(null,方法参数);

七:简述四元数Quaternion的作用,四元数对欧拉角的优点?

答:四元数用于表示旋转

相对欧拉角的优点:

能进行增量旋转

避免万向锁

给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)

八:如何安全的在不同工程间安全地迁移asset数据?三种方法

答:

1.将Assets和Library一起迁移

2.导出包package

3.用unity自带的assets Server功能

九:OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?

答:Awake–>OnEnable->Start

OnEnable在同一周期中可以反复地发生!

十:MeshRender中material和sharedmaterial的区别?

答:

修改sharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。

不推荐修改由sharedMaterial返回的材质。如果你想修改渲染器的材质,使用material替代。

十一:请简述ArrayList和List之间的主要区别。

十二:TCP/IP协议栈各个层次及分别的功能

答:网络接口层:这是协议栈的最低层,对应OSI的物理层和数据链路层,主要完成数据帧的实际发送和接收。

网络层:处理分组在网络中的活动,例如路由选择和转发等,这一层主要包括IP协议、ARP、ICMP协议等。

传输层:主要功能是提供应用程序之间的通信,这一层主要是TCP/UDP协议。

应用层:用来处理特定的应用,针对不同的应用提供了不同的协议,例如进行文件传输时用到的FTP协议,发送email用到的SMTP等。

十三题:Unity提供了几种光源,分别是什么

答:

四种。

平行光:Directional Light

点光源:Point Light

聚光灯:Spot Light

区域光源:Area Light

十四:简述一下对象池,你觉得在FPS里哪些东西适合使用对象池?

对象池就存放需要被反复调用资源的一个空间,比如游戏中要常被大量复制的对象,子弹,敌人,以及任何重复出现的对象。

十五:CharacterController和Rigidbody的区别?

Rigidbody具有完全真实物理的特性,而CharacterController可以说是受限的的Rigidbody,具有一定的物理效果但不是完全真实的。

十六:移动相机动作在哪个函数里,为什么在这个函数里?

LateUpdate,是在所有的Update结束后才调用,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是所有的Update操作完才进行摄像机的跟进,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。

十七:简述prefab的用处

在游戏运行时实例化,prefab相当于一个模板,对你已经有的素材、脚本、参数做一个默认的配置,以便于以后的修改,同事prefab打包的内容简化了导出的操作,便于团队的交流。

十八:请简述sealed关键字用在类声明时与函数声明时的作用。

答:类声明时可防止其他类继承此类,在方法中声明则可防止派生类重写此方法。

十九:请简述private,public,protected,internal的区别。

public:对任何类和成员都公开,无限制访问

private:仅对该类公开

protected:对该类和其派生类公开

internal:只能在包含该类的程序集中访问该类

protected internal:protected + internal

二十:简述SkinnedMesh的实现原理

二十一:GPU的工作原理

简而言之,GPU的图形(处理)流水线完成如下的工作:(并不一定是按照如下顺序)

顶点处理:这阶段GPU读取描述3D图形外观的顶点数据并根据顶点数据确定3D图形的形状及位置关系,建立起3D图形的骨架。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Vertex

Shader(定点着色器)完成。

光栅化计算:显示器实际显示的图像是由像素组成的,我们需要将上面生成的图形上的点和线通过一定的算法转换到相应的像素点。把一个矢量图形转换为一系列像素点的过程就称为光栅化。例如,一条数学表示的斜线段,最终被转化成阶梯状的连续像素点。

纹理帖图:顶点单元生成的多边形只构成了3D物体的轮廓,而纹理映射(texture

mapping)工作完成对多变形表面的帖图,通俗的说,就是将多边形的表面贴上相应的图片,从而生成“真实”的图形。TMU(Texture mapping

unit)即是用来完成此项工作。

像素处理:这阶段(在对每个像素进行光栅化处理期间)GPU完成对像素的计算和处理,从而确定每个像素的最终属性。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Pixel

Shader(像素着色器)完成。

最终输出:由ROP(光栅化引擎)最终完成像素的输出,1帧渲染完毕后,被送到显存帧缓冲区。

总结:GPU的工作通俗的来说就是完成3D图形的生成,将图形映射到相应的像素点上,对每个像素进行计算确定最终颜色并完成输出。

二十二:什么是渲染管道?

答:是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。

主要步骤有:

本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。

二十三:如何

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值