【春秋招必看】Unity相关笔试面试题(内有完整答案)第四期

欢迎来到光光的奇妙冒险,我是你们的煎饼光子老师。

今天是我们的第四期笔试面试题总结。


C#部分:

1、请说明字符串中
string str = null
string str = ""
string str = string.Empty
三者的区别

答案:
str = null 在堆中没有分配内存地址
str = "" 和 string.Empty 一样都是在堆内存中分配了空间,里面存储的是空字符串
而string.Empty是一个静态只读变量

2、C#重载运算符,重载 == 和 != 以及 万物之父Object基类中的虚方法 virtual bool Equals(Object obj)对于我们的意义是什么?

答案:
为了判断两个对象的非引用地址相等
我们可以选择 使用 重载运算符 == 和 != 或者
重写Equals方法,来自定义判断两个对象是否相等
如果想保留原有的引用地址相等判断,那么一般我们选择重写Equals方法

3、在开发时,对string和StringBuilder我们应该如何选择

答案:
string在每次拼接时都会产生垃圾
而StringBuilder在拼接时,是在原空间中进行修改,不会产生垃圾,会自动帮助我们扩容
所以当字符串需要频繁修改拼接时,我们使用StringBuilder

4、请简要说明.Net跨语言原理

答案:
.Net制定了了CLI公共语言基础结构的规则
只要是按照该规则设计的语言在进行.Net相关开发时
编译器会将源代码(C#、VB等等)编译为CIL通用中间代码。
也就是说不管什么语言进行开发,最终都会统一规范变为中间代码
最终通过CLR(公共语言运行时或者称为.Net虚拟)将中间代码翻译为对应操作系统的原生代码(机器码)
在操作系统(Windows)上运行

5、请简要说明.Net跨平台原理

答案:
由于.Net Framework中利用CLI和CLR实现了跨语言,CLR主要起到一个翻译、运行、管理中间代码的作用
.Net Core和Mono就是利用了CLR的这一特点,为不同操作系统实现对应CLR(公共语言运行时或.Net虚拟机)
那么不同操作系统对应的CLR就会将IL中间代码翻译为对应系统可以执行的原生代码(机器码)
达到跨平台的目的


Unity部分:

1、Unity中的Destroy和DestroyImmediate的区别是什么?

答案:
Destroy方法
可以指定删除的延迟时间,如果第二个参数不填写,最快也会在下一帧前完成删除。也就是如果Destroy对象后马上判空,该对象不会为空。
实际的对象销毁操作始终延迟到当前更新循环结束,但始终在渲染前完成

DestroyImmediate方法
会立即销毁删除对象

2、请问最终打印的 s 的结果为?

答案:
AC
主要考点
1.DestroyImmediate方法会立即将GameObject对象从场景上删除
2.UnityEngine.Object中对 ==、!=、! 进行了重载,如果用  !go 和 go == null 去判断对象是否为空,由于重载了,所以能够返回正确的结果 ture 和 false
但是本质上此时的 go 还不是真正意义上的的null,所以如果用 go is null
或者 将其转换为 万物之父 Object  (System.Object)go == null 去判断时 并不会为true
因此只会进入AC的if语句

这里的重点内容就是UnityEngine.Object 中重载了 逻辑非! 和 == != 运算符,因为使用他们来判断null 是可以的,但是此时的GameObject在内部并不是真正意义的null
我们在使用时最好手动置空

3、第一次执行GameObject.Instantiate时可能出现明显的卡顿
如何解决该问题?

答案:
我们可以通过Unity自带的性能分析工具Profiler分析实例化时造成卡顿的原因
程序上,一般我们可以从以下3个方面去优化它
1.相关资源加载:如果是由于资源加载带来的卡顿,我们可以在进入场景时进行资源预加载,总体思路就是将较大资源提前或者分帧加载

2.脚本初始化:实例化对象时,会同步执行它身上挂载所有脚本的初始化工作,我们可以策略性的改变一些初始化逻辑,尽量不要再Awake和Start中做较复杂的逻辑,或者将复杂逻辑提前或者分帧处理

3.对于会频繁使用的对象,我们可以使用缓存池

美术上
不能只追求好的美术效果,而不考虑资源的消耗,要根据项目的实际情况,来设定模型的骨骼数、面数以及贴图的数量和大小上限。
在制作粒子特效时,粒子数、粒子面积、贴图等都要尽量少和小。
美术上要遵循:用最少的资源做出做好的效果,不能一味的用性能去换效果,最终会得不偿失

4、Lua如何实现面向对象的三大特性?

答案:
面向对象三大特性
封装:利用table进行封装
继承:利用元表和__index模拟继承关系
          设置子类的元表为父类,父类的__index为父类自己
          当子类身上找不到对应属性和方法时
          会查找元表的__index中的内容,也就是会查找父类中的内容
          通过这种方式来模拟继承
多态:子类自己去实现带:的同名方法即可 

5、Unity使用IL2CPP打包时,我们应该注意什么?如何避免(可以举例说明)

答案:
使用IL2CPP打包时,最可能出现的问题就是代码裁剪,IL2CPP会自动将它认为不会使用的代码裁剪掉,比如我们在使用Lua开发时,其实会用到很多UnityEngine或者我们自己写的C#代码,但是这些代码并不会在引擎中直接使用,都是在Lua中使用的,此时最容易出现的问题就是代码裁剪,导致打包后出现异常和报错。

要避免IL2CPP的裁剪有3种方式,我们可以组合使用
1.设置打包时的裁剪等级
2.通过xml文件配置明确规定哪些内容不裁剪
3.在静态方法中显示调用不想被裁剪的内容

### 回答1: Unity是一款广泛使用的游戏开发引擎。它提供了可视化的编辑器界面、底层的渲染引擎以及广泛支持的插件生态系统,使得开发者可以很方便地进行游戏开发。 如果你准备参加Unity面试笔试,你需要掌握以下方面的知识: 1. 编程语言Unity支持C#和JavaScript语言。你需要掌握其中一种或两种编程语言,并且能够熟练应用它们。 2. 游戏设计:你需要具备游戏设计的基本知识,包括游戏流程、关卡设计、角色设计、游戏平衡等方面的知识。 3. Unity编辑器:你需要熟练掌握Unity编辑器的各种工具,例如场景编辑、组件列表、资源管理等。 4. 物理引擎:Unity包含了物理引擎,你需要熟悉它的基本概念,例如重力、力、碰撞等。 5. 动画系统:游戏中的角色动画是非常重要的一部分,你需要熟悉Unity的动画系统,包括动画控制器、状态机等。 总之,如果你想要在Unity领域取得成功,你需要在以上方面进行深入学习和掌握。如果你能够在面试笔试中展现出你的知识和技能,相信你会很快获得工作机会。 ### 回答2: Unity是当前市面上非常流行的游戏引擎,而从事Unity开发的人才需求也越来越大。在面试笔试中,可能会涉及到Unity相关知识和技能。下面将从Unity的四个方面进行简单介绍:游戏物体、组件、Scene和Asset以及C#语言。 1. 游戏物体 在Unity中,物体(GameObject)是游戏场景中的核心对象。而每一个场景都是由若干个物体组成,物体又是由若干个组件(Component)组成的。因此,需要了解游戏物体的各种操作和属性设置,包括名称、激活状态、位置、旋转、缩放、父子关系等。 2. 组件 组件是Unity中最常用的一种对象,也是游戏物体的一个基本组成部分。它可以改变游戏物体的行为、外观和互动方式。在Unity中,可以通过添加或删除组件来更改游戏物体的属性和行为。例如,常用的组件包括:Animator、Rigidbody、Collider等。 3. Scene和Asset Scene(场景)是Unity的一个概念,是由多个游戏物体和它们的组件组成的。在进行游戏开发时,需要了解如何创建、导入和导出Scene。而Asset(资源)则是指Unity中的各种资源文件,例如:纹理、音频、3D模型、动画等。需要了解如何使用Asset Store、如何导入和设置Asset等。 4. C#语言 Unity使用C#语言作为主要的编程语言。因此,在进行Unity开发时,需要了解一些基本的C#语言语法和编程思想,包括:变量、方法、类、继承、多态、接口、委托等。此外,还需要了解一些Unity特有的API和对象模型,例如:GameObject、Component、Transform、Input、Physics等。 总体来说,对于Unity面试笔试,需要具备扎实的Unity框架和常用组件的运用能力,同时还能够掌握C#语言的基本知识。只有掌握了这些核心技能,才能在Unity开发中不断提升自己,并为团队和项目创造出更多价值。 ### 回答3: Unity 是一款非常流行的游戏开发引擎,其在市场上占有非常重要的地位,因此很多人选择学习和使用 Unity。如何通过 Unity面试笔试题来测试候选人的实际技能以及对 Unity 开发的理解和掌握程度呢? 对于 Unity面试笔试题,一般会涉及以下几个方面: 1. 编程语言和算法基础 Unity 开发主要使用 C# 语言,因此需要候选人具备扎实的 C# 基础和算法基础,包括数据结构、算法思想、设计模式等方面的知识。 2. Unity 引擎和 API 掌握程度 作为 Unity 开发者,需要掌握很多 Unity 引擎和 API 的知识,比如场景管理、游戏物体与组件、UI 界面开发、动画系统、物理引擎等。针对这些方面,笔试题目可能会让候选人通过代码实现相关功能或者回答相关问题。 3. 项目经验和实践能力 除了理论知识,实际项目经验和实践能力也非常重要。因此,笔试题目可能会涉及到一些实际场景的开发问题,比如优化性能、解决 bug、协作开发等方面。 总之,Unity 面试笔试题主要考察候选人的编程能力、Unity 引擎和 API 掌握程度以及项目实践能力。同时,需要候选人具备良好的沟通能力和团队合作精神,这对于实际开发非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity练习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值