Unity3d面试题(技术篇)

本文详细探讨了Unity3D面试中涉及的C#技术,包括面向对象、数据结构、算法和设计模式。同时,还深入讲解了Unity3D的基础知识、生命周期、Rigidbody、Camera、Animation、3D数学等方面,并涵盖了移动端适配和平台差异。通过阅读,读者可以全面了解Unity3D开发中的核心技术和面试重点。

C#

基础

  • 面向对象思想的三要素是什么

  • 继承和组合的区别是什么

    • 继承是面向对象三大基本特征之一(继承,封装,多态),继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
    • 组合是通过对现有对象进行拼装即组合产生新的具有更复杂的功能
    • 详细说明
  • 什么是多态

    • 多态是同一个行为具有多个不同表现形式或形态的能力
    • 详细说明
  • 重载的返回值需要相同吗?

    • 重载的返回值类型可以相同也可以不同
  • 重写和重载分别是什么

    • 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变
    • 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
    • 详细说明
  • 接口和抽象类有什么区别,什么时候使用接口,什么时候使用抽象类

    • 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
    • 详细说明
  • tcp和udp有什么区别

  • 深拷贝和浅拷贝的区别

    • 深拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针和堆内存中的对象。
    • 浅拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针,不复制堆内存中的对象。
  • 值类型和引用类型的区别

    • 值类型存储在栈内存或堆内存之中,而引用类型只能放堆内存里。
    • 详细说明
  • string 是值类型还是引用类型

    • 引用类型
  • 如何判断两个string类型相等

    • ==
  • {1,null,2} 长度为? {1,2,null}长度为?

    • {1,null,2} 长度 3
    • {1,2,null} 长度 3

数据结构

  • 数据结构都有哪些
    • Array,ArrayList,List,LinkedList,Queue,Stack,Dictionary<K,T>
  • Dictionary 底层是如何实现的
  • List 底层是如何实现的
  • 栈和队列的区别 队列一般用在哪里

算法

排序

设计模式

  • 使用过哪些设计模式
  • 观察者模式是什么 自己实现一个观察者模式
    • 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
    • 详细说明
  • 单例能被重新赋值吗
    • 可以

Unity3d

基础

  • 如何让一个物体旋转
    • transform.Rotate(Vector3 eulerAngles)
  • transform.Rotate() 旋转的是欧拉角还是四元素
  • pixels per unit 指的是什么
    • 本图片的像素与Unity3D 单位之间的映射比例,一个Unity3D单位对应多少个图片像素
  • sprite renderer 和 ugui 使用一张图片,大小为什么会不一样
  • A物体挡住了B物体 如何使用遮挡剔除剔除B物体
  • Unity 中的坐标系是左手坐标系还是右手坐标系
    • 左手坐标系
  • 协程、线程、进程之前都有哪些区别
  • 移动端ui如何适配
  • Unity 中的光源类型有哪些
    • 平行光 点光源 聚光灯 区域光
  • 烘焙贴图能记录什么信息
  • drawcall 是什么
    • 每次引擎准备数据并通知GPU的过程称为一次Draw Call
  • 对象池作用,什么情况下需要用到对象池技术

生命周期

  • unity 声明周期函数都有哪些 顺序分别是?
  • 生命周期函数 Awake Start OnEnable 顺序分别是?
    • Awake → OnEnable → Start
  • 在生命周期函数 Update LateUpdate FixedUpdate 的区别? 其中都适合放置什么
  • 协程 IEnumerator 在生命周期的那一阶段调用的

Rigidbody

  • 物体发生碰撞的条件
    • 两个对象都有Collider组件且至少一个有Rigidbody组件
      其中至少一个物体(必须运动的)必须带有碰撞器(collider)+刚体(Rigidbody),另一个物体(可以静止也可以运动)也必须至少带有collider
  • 将 rigidbody 设置 static 还会发生碰撞吗

Camera

  • 视锥体概念
  • 2d相机和3d相机有什么区别
    • Projection 3D相机自然设置为Perspective(透视),2D相机为Orthographic(正交)
  • 2d camera中的size调节的是什么

Animation

  • 动画分类
    • 关节动画
    • 骨骼动画
    • 单一网格模型动画(关键帧动画)。
  • avatar如何配置,重用avatar时发现avatar不匹配,如何解决
  • animation中如何在某一帧触发一个方法
    • 给动画添加一个事件(Event)
    • 创建C#脚本 并且添加一个事件名参数类型相同的方法名
    • 挂载到 animation 持有者上
    • 详细说明

3d数学

坐标系

  • 左手坐标系是怎么样,x轴 y轴 z轴 分别是
  • 右手坐标系是怎么样,x轴 y轴 z轴 分别是

向量

  • 什么是点乘,点乘的几何意义是什么,得到的结果是什么
  • 什么是叉乘,叉乘的几何意义是什么,得到的结果是什么,如何判断叉乘的方向
    • 叉乘结果是一个向量
    • 根据左手法则来判断叉乘结果的方向
    • 详细说明

欧拉角 & 四元素

  • 欧拉角和四元素各自的优缺点
    • 欧拉角
      • 优点:三个角度组成,直观,容易理解。
      • 优点:可以进行从一个方向到另一个方向旋转大于180度的角度。
      • 弱点:死锁(万向锁)问题
    • 四元素
      • 优点:四元旋转不存在万向节锁问题。
      • 优点:存储空间小,计算效率高。
      • 弱点:单个四元数不能表示在任何方向上超过180度的旋转。
      • 弱点:四元数的数字表示不直观。
    • 详细说明
  • 万向锁是如何形成的,如何解决万向锁
    • 使用动态欧拉角会出现万向锁现象;静态欧拉角不存在万向锁的问题。
      一个典型的万向锁问题可以表述如下:先heading45°再pitch90°,这与先pitch90°再bank45°是等价的。事实上,一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,丢失了一个表示维度。这种角度为±90°的第二次旋转使得第一次和第三次旋转的旋转轴相同的现象,称作万向锁。
    • 详细说明
    • 解决万向锁

编辑器扩展

  • 如何在编辑菜单栏上添加一个按钮
[MenuItem("Tools/Test",false,1)]
static void Test()
{
    Debug.Log("test");  
}

注意:MenuItem中第一个参数:需要创建选项在工具栏中的路径,此路径的父目录可以是Unity中已存在的,也可以自己直接同子目录一起创建,例如创建“MyApp/FPS”路径。

MenuItem中第二个参数:用于菜单项是否启用,后面会详细介绍。
MenuItem中第三个参数:该选项的优先级,默认为1000,越小优先级越大,选项越靠前。若需分块显示选项,则相邻两块之间的优先级必须相差11.

优化

案例

  • 如何在两个ui之间添加一个粒子效果
  • 如何在两个ui之前添加一个3d模型
  • 如何实现绳子效果
  • 简单实现一个拼图游戏

Android & IOS

Android

  • gradle是什么
    • gradle 是目前非常流行的一个项目构建工具
    • 详细说明
  • 接入渠道sdk后调用支付流程

IOS

  • CocoaPods 是什么
    • CocoaPods是一个管理第三方的开源工具
  • oc +号 -号方法有什么区别
    • +号方法是类方法
    • -号方法是成员方法
  • app store 打包上架流程
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值