unity面试题整理----50道常见

  1. 得到程序集中所有类的名称。
  2. Type type = assembly.GetType(“程序集.类名”);获取当前类的类型。
  3. Activator.CreateInstance(type); 创建此类型实例。
  4. MethodInfo mInfo = type.GetMethod(“方法名”);获取当前方法。
  5. mInfo.Invoke(null,方法参数)。
11、Unity3D是否支持写成多线程程序?如果支持的话需要注意什么?
  1. 仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用
  2. 支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine。
  3. 注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象。
12、Unity3D的协程和C#线程之间的区别是什么?
  1. 多线程程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。
  2. 除主线程之外的线程无法访问Unity3D的对象、组件、方法。
  3. 在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。
13、U3D中用于记录节点空间几何信息的组件名称,及其父类名称?

U3D中用于记录节点空间几何信息的组件名称是 Transform ,它的父类是 Component。

14、简述四元数的作用,四元数对欧拉角的优点?

四元数用于表示旋转。
相对欧拉角的优点:

  1. 能进行增量旋转。
  2. 避免万向锁。
  3. 给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)。
17.向量的点乘、叉乘以及归一化的意义?
  1. 点乘描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影
  2. 叉乘得到的向量垂直于原来的两个向量
  3. 标准化向量:用在只关系方向,不关心大小的时候
18、在场景中放置多个Camera并同时处于活动状态会发生什么?

实际看到的画面由多个camera的画面组成;由depth、Clear Flag、Culling Mask都会影响最终合成效果。

19、Prefab的作用?如何在移动环境的设备下恰当地使用它?

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

**20、**如何安全的在不同工程间安全地迁移asset数据?
  1. 将Assets目录和Library目录一起迁移。
  2. 导出包。
  3. 用unity自带的assets Server功能。
21、MeshRender中material和sharedmaterial的区别?

修改sharedMaterial将改变所有物体使用这个材质的外观,并且也改变储存在工程里的材质设置。不推荐修改由sharedMaterial返回的材质。如果你想修改渲染器的材质,使用material替代。

22、请描述游戏动画有哪几种,以及其原理?

关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活Quake2中使用了这种动画。

单一网络模型动画:由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。

骨骼动画:广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观。皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画。(骨骼动画是由关节动画发展而来的,如今基本都使用骨骼动画来实现角色动画)。

23、alpha blend****工作原理?

实际显示颜色 = 前景颜色*Alpha/255 + 背景颜色*(255-Alpha)/255。

24、lod****是什么?优缺点是什么?

LOD技术即Levels of Detail的简称,意为多细节层次。

LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。

优点:可根据距离动态地选择渲染不同细节的模型

缺点:加重美工的负担,要准备不同细节的同一模型,同样的会稍微增加游戏的容量。

25、MipMap****是什么?作用?

在三维计算机图形的贴图渲染中有一个常用的技术被称为Mipmapping。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 MIP map 或者 mipmap。

26、u3d****中碰撞器和触发器的区别?

collider碰撞器会有碰撞的效果,IsTrigger = false,可以调用OnCollisionEnter/Stay/Exit函数。

trigger触发器没有碰撞效果,isTrigger = true,可以调用OnTriggerEnter/stay/exit函数。

**27、**物体发生碰撞的必要条件?

物体A必须带有(collider+rigidbody)或者CharacterController,另一个物体也必须至少带有collider。

**28、**什么叫做链条关节?

Hinge Joint ,他可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。(简单说就是弹簧)

29、物体自旋转使用的函数叫什么?绕某点旋转使用函数叫什么?

transform.Rotate和 transform.RotateAround

30、u3d****提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整形数据的函数?

PlayerPrefs.SetInt ()与 PlayerPrefs.GetInt()。

31、unity3d****提供了几种光源,分别是什么?
  1. 平行光:Directional Light;
  2. 聚光灯:Spot Light;
  3. 点光源:Point Light;
  4. 区域光源:Area Light(只用于烘培)
32、unity3d****从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法。

Awake –>OnEnable –> Start  –> Update –> FixedUpdate –> LateUpdate –> OnDisable –> OnDestroy;

FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。

FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。

Update就比较适合做控制。

**33、**移动相机动作在哪个函数里,为什么在这个函数里。

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

34、什么是渲染管道?

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

主要步骤有:

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

35、如何优化内存?
  1. 压缩自带类库;(只用到一个简单方法就可以自己写而不用using)。
  2. 将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉。
  3. 释放AssetBundle占用的资源。
  4. 降低模型的片面数,降低模型的骨骼数量,降低贴图的大小。
  5. 使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。
36、C# 的Lambda表达式怎么写?

表达式形式:(Input Param)=>Expression。在表达式左侧的表示输入参数,右侧的为相应的运算语句或者判断语句等,可包含函数调用等复杂方式。运算符=>读作为goes to,例如下面这个表达t=>t.ClassCode=‘1001’,多做goes to ClassCode equal 1001。

在上述的表达式中,仅仅只有当参数只有一个的时候,括号是可选择的,例如下面这种含有两个参数时候的情况应该是这样子的写法:(a,b)=>a==b

当表达式中的多个参数编译器无法自动判断类型的时候,则需要显式指定类型。

(``int firstIndex,``string str) => str.IndexOf(``'Hello'``) > firstIndex

**37、**数列1,1,2,3,5,8,13…第n位数是多少?用C#递归算法实现
private void Start()
    {
        print(FunTest(4));
    }
    public int FunTest(int num)
    {
        if (num <= 0)
        {
            return 0;
        }
        else if (num == 1 || num == 2)
        {
            return 1;
        }
        else
        {
            return FunTest(num - 1) + FunTest(num - 2);
        }
    }
38、unity的mathf?

Mathf.Abs绝对值

计算并返回指定参数 f 绝对值。

Mathf.Acos反余弦

static function Acos (f : float) : float 以弧度为单位计算并返回参数 f 中指定的数字的反余弦值。

Mathf.Clamp01限制0~1

static function Clamp01 (value : float) :float 限制value在0,1之间并返回value。如果value小于0,返回0。如果value大于1,返回1,否则返回value 。

Mathf.Clamp限制

static function Clamp (value : float, min :float, max : float) : float 限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value static function Clamp (value : int, min :int, max : int) : int 限制value的值在min和max之间,并返回value。

Mathf.Deg2Rad度转弧度

static var Deg2Rad : float 度到弧度的转化常量。(只读) 这等于(PI * 2) / 360。

Mathf.Mathf.Rad2Deg 弧度转度

static var Rad2Deg : float 弧度到度的转化常量。(只读) 这等于 360 / (PI * 2)。

Mathf.Infinity正无穷

static var Infinity : float 表示正无穷,也就是无穷大,∞ (只读)

Mathf.Lerp插值
static function Lerp (from : float, to :float, t : float) : float 基于浮点数t返回a到b之间的插值,t限制在0~1之间。 当t = 0返回from,当t = 1 返回to。当t = 0.5 返回from和to的平均值。

Mathf.MoveTowards移向
static function MoveTowards (current :float, target : float, maxDelta : float) : float 改变一个当前值向目标值靠近。 这实际上和 Mathf.Lerp相同,而是该函数将确保我们的速度不会超过maxDelta。maxDelta为负值将目标从推离。

Mathf.RoundToInt四舍五入到整数
static function RoundToInt (f : float) :int 返回 f 指定的值四舍五入到最近的整数。 如果数字末尾是.5,因此它是在两个整数中间,不管是偶数或是奇数,将返回偶数。

Mathf.Round四舍五入

static function Round (f : float) : float 返回浮点数 f 进行四舍五入最接近的整数。 如果数字末尾是.5,因此它是在两个整数中间,不管是偶数或是奇数,将返回偶数。

Mathf.Sqrt平方根

static function Sqrt (f : float) : float 计算并返回 f 的平方根。

39、结构体和类有何区别?

结构体是一种值类型,而类是引用类型。

(值类型、引用类型是根据数据存储的角度来分的)就是值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。

40、ref参数和out参数是什么?有什么区别?

相同点:ref和out参数的效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址,并通过方法体内的语法改变它的小。

不同点:就是输出参数必须对参数进行初始化。ref必须初始化,out 参数必须在函数里赋值。

ref参数是引用,out参数为输出参数。

41、C#的委托是什么?有何用处?

委托类似于一种安全的指针引用,在使用它时是当做类来看待而不是一个方法,相当于对一组方法的列表的引用。

用处:使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 24
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值