Unity面试题加强版
### Unity面试题加强版知识点详解 #### 一、Unity3D中的协程(coroutine)与C#线程的区别 1. **并发性**: - 多线程:能够同时运行多个线程,实现真正的并行计算。 - 协程:在任何指定时刻只能运行一个协程。正在运行的协程只有在必要的时候才会被挂起。 2. **对象访问限制**: - 多线程:除主线程外的其他线程无法直接访问Unity3D的对象、组件或方法。 - 协程:所有协程都在主线程中运行,因此可以直接访问Unity的对象、组件和方法。 3. **Unity3D的多线程限制**: - Unity3D本身不支持传统意义上的多线程编程,但提供了StartCoroutine和LoadLevelAsync等方法来实现类似的效果。 - `StartCoroutine`:通过这种方式可以实现代码的非阻塞执行,即在等待某个操作完成的同时,主线程仍然可以处理其他任务。 - `LoadLevelAsync`:允许在后台加载新资源和场景,同时主线程可以通过UI等手段告知用户正在加载。 4. **StartCoroutine的工作原理**: - 当在一个协程函数中遇到`yield`语句时,该协程会被暂停,直到下一个Update调用时才会继续执行。 - 这种机制使得协程可以在等待某些操作完成(如网络请求或文件读写)的同时,主线程依然能够处理其他任务。 #### 二、Unity3D支持的脚本语言 1. **脚本语言环境**: - Unity的脚本语言基于Mono的.NET平台运行,支持.NET库,为开发者提供了处理XML、数据库、正则表达式等功能的强大工具。 2. **脚本语言对比**: - JavaScript:尽管名为JavaScript,但其实与Web开发中常用的JavaScript有所不同,它的编译速度快,语法也有一定的差异。 - C#:最常用的一种脚本语言,也是Unity推荐使用的语言,具有丰富的功能和良好的性能。 - Boo:可以看作是Python的一个变种,融合了Ruby和C#的部分特性,是一种静态类型语言。 #### 三、多线程支持与注意事项 1. **Unity3D的多线程限制**: - 只能在主线程中访问Unity3D的组件、对象和系统调用。 - 支持多线程处理一些与Unity对象交互较少的任务,如后台加载资源或处理网络请求等。 2. **注意事项**: - 使用`lock`关键字来确保同一时间只有一个线程可以访问特定的对象,避免多线程导致的数据不一致问题。 #### 四、Unity3D生命周期方法及其顺序 1. **方法顺序**: - Awake:初始化阶段,最先被调用。 - OnEnable:启用对象时调用。 - Start:初始化后调用,通常用于设置初始状态。 - Update:每帧调用,用于更新逻辑。 - FixedUpdate:固定帧率调用,常用于物理计算。 - LateUpdate:Update之后调用,常用于处理相机或动画同步。 - OnGUI:绘制GUI界面时调用。 - Reset:编辑器模式下重置脚本属性时调用。 - OnDisable:禁用对象时调用。 - OnDestroy:对象销毁前调用。 2. **可反复发生的生命周期方法**: - `OnEnable`:当物体被激活时会反复调用。 #### 五、碰撞检测回调函数 1. **碰撞检测回调函数**: - `OnCollisionEnter`:当碰撞开始时调用。 - `OnCollisionStay`:在两个碰撞体保持接触期间持续调用。 - `OnCollisionExit`:当碰撞结束时调用。 2. **用途**: - 这些回调函数可以用来处理碰撞事件,例如触发声音效果、改变物体状态等。 #### 六、物体运动与旋转方法 1. **施加力的方式**: - `rigidbody.AddForce`:向刚体对象添加力。 - `rigidbody.AddForceAtPosition`:向刚体对象在特定位置施加力。 2. **物体旋转方法**: - `transform.Rotate`:使物体自身旋转。 - `transform.RotateAround`:使物体围绕某个点旋转。 #### 七、数据保存与读取 1. **PlayerPrefs**: - `PlayerPrefs.SetInt`:保存整型数据。 - `PlayerPrefs.GetInt`:读取整型数据。 #### 八、Unity3D中的生命周期与关键方法 1. **物理更新**: - `FixedUpdate`:用于物理引擎计算。 2. **移动相机**: - `LateUpdate`:在所有Update结束后调用,适合处理相机的移动,以确保在所有Update逻辑完成后进行移动。 #### 九、Unity3D中的组件数据丢失问题 1. **原因**: - 组件上绑定的物体对象被删除会导致数据丢失。 #### 十、协同程序详解 1. **定义**: - 协同程序是在主线程运行时开启的一段逻辑处理,用来协助当前程序的执行。 2. **应用场景**: - 控制运动、序列以及对象的行为。 #### 十一、反向旋转动画的方法 1. **实现方式**: - 将动画的速度设为-1,实现动画的反转播放。 #### 十二、实现第三人称视角 1. **实现思路**: - 创建一个相机对象,并将其定位在玩家角色后方一定距离处。 - 使用`LateUpdate`方法来更新相机的位置,确保其始终跟随角色移动。 - 可以通过调整相机的位置、旋转角度等参数来实现理想的第三人称视角效果。
剩余35页未读,继续阅读
- 不导翁2021-10-11好多错误的,自己甄别吧
- 粉丝: 9
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助