Unity之Unity面试题(三)
内容将会持续更新,有错误的地方欢迎指正,谢谢!
| 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 |
| 助力快速掌握 面试题 为面试者节省宝贵的学习时间,避免困惑! |

文章目录
- 一、Unity提供了几种光源,分别有什么?
- 二、两个物体发生碰撞的条件?接触的方式有什么?碰撞有几个阶段,对应的函数是什么?
- 三、CharacterController组件
- 四、Unity 对物体施加力的方式有几种,描述一下
- 1、力的方式
- 2、 力的模式
- 五、Unity的生命周期安函数,分别在什么时候执行?
- 1、Editor
- 2、Initialization
- 3、Physics
- 4、Input Event
- 5、Game Logic
- 6、Scene Rendering
- 7、Gizmo Rendering
- 8、GUI Rendering
- 9、Pausing
- 10、Disable
- 11、Decommissioning
一、Unity提供了几种光源,分别有什么?
- Directional Light 平行光
- Point Light 点光源
- Spot Light 聚光灯
- Area Light 区域光 无法作用与实时光照,一般用于光照贴图烘焙
二、两个物体发生碰撞的条件?接触的方式有什么?碰撞有几个阶段,对应的函数是什么?
- 两个碰撞的物体都必须有Collider组件,且至少一个物体有Rigidbody组件
- 其中运动的那个物体必须有Rigidbody组件,另一个物体可以带可以不带
对于有Rigidbody组件的物体,我们可以把它当作一个有质量且受力作用的刚体,而没有该组件的物体,我们认为它是静态物体,不受力的影响
物体碰撞有两种接触方式:
- Collision碰撞 造成物理碰撞
条件: 两个碰撞器都不要勾选isTrigger,运动的那个Rigidbody不要勾选Is Kinematic,当为true时,物体不受物理引擎的影响
- 进入碰撞器 OnCollisionEnter()
- 停留碰撞器 OnCollisionStay()
- 退出碰撞器 OnCollisionExit()
- Trigger触发 取消所有的物理碰撞
条件: 至少有一个碰撞器需要勾选isTrigger
- 进入碰撞器 OnTriggerEnter()
- 停留碰撞器 OnTriggerStay()
- 退出碰撞器 OnTriggerExit()
三、CharacterController组件
-
CharacterController为角色控制器,角色控制器一般用于第一人称或第三人称游戏主角的控制。
-
添加了CharacterController组件后,人物将不受外力的作用,即使添加Rigidbody组件,并启用重力,人物不会受力的作用,也就是说CharacterController屏蔽了Rigidbody的属性和方法(前提是调用了CharacterController类里面的方法)。
-
控制角色控制器移动有两种方法:
- SimpleMove() 简单移动,会自动应用重力
- Move() 复杂运动,不会应用重力
-
角色控制器不受外力的作用,但是可以进行碰撞检测,一般碰撞的条件是两个碰撞的物体都必须有Collider组件,并且至少有一个Rigidbody组件,但是如果一方有CharacterController组件,则另一方只要有Collider组件就可以产生碰撞,CharacterController本身就继承了Collider类。
-
CharacterController不受外力的作用,同时也不会对它所碰撞的物体施加力的作用,3 除非在OnControllerColliderHit()回调中对被碰撞的物体的Rigidbody上施加力
总结:CharaterController 不受物理引擎的影响,即使添加了Rigidbody,但是他的运动受制于碰撞。
四、Unity 对物体施加力的方式有几种,描述一下
1、力的方式
- Rigidbody.AddForce()
在世界坐标系中,对刚体上添加一个力 - Rigidbody.AddRelativeForce()
相对自身坐标系,对刚体添加一个力 - Rigidbody.AddTorque()
在世界坐标系中,对刚体上添加一个力矩 - Rigidbody.AddRelativeTorque()
相对自身坐标系,对刚体添加一个力矩 - Rigidbody.AddForceAtPosition()
在物体表面添加一个力,相当于对物体施加了一个力和力矩 - Rigidbody.AddExplosionForce()
对物体添加一个爆炸力,应用一种力到刚体来模拟爆炸效果,就是在爆炸力中心坐标,搜索在半径范围内的刚体,对其释放力的作用,超出半径范畴的刚体不受力的作用
2、 力的模式
- Force: 添加一个可持续的力到刚体,使用它的质量。
- Acceleration: 添加一个持续的加速度到刚体,忽略它的质量。
- Impulse: 添加一个瞬间冲击力到刚体,使用它的质量。
- VelocityChange: 添加一个瞬间速度给刚体,忽略它的质量。
五、Unity的生命周期安函数,分别在什么时候执行?
1、Editor
- Reset()
Reset是用户在Inspector面板上点击Reset按钮或首次添加组件的时候被调用,只在编辑器模式下被调用
2、Initialization
-
Awake()
- Awake在加载脚本实例时被调用,一般在游戏开始前使用Awake来初始化变量或状态。
- 在加载场景时初始化活动的GameObject的脚本实例时,或者将先前非活动的GameObject设置为活动时,或者使用Object.Instantiate创建Gameobject时,或则给活动状态的GameObject添加脚本时,都将调用Awake。
- Awake是在所有对象初始化完成后调用的,并且每个对象上的Awake以随机的顺序被调用的。
- Awake的调用和脚本实例的启用或禁用无关,和脚本实例挂载的游戏对象的状态有关。
- Awake相当于构造函数,只会被调用一次。
-
OnEnable()
在Awake之后调用,当游戏对象或脚本实例变为可用或激活状态时调用。
-
Start()
- Start仅在Update函数第一次调用前调用,在生命周期中只会被调用一次。
- Start总是在所有Awake函数执行完之后被调用。
- Start和Awake不同的是,Start只在脚本实例启用的时候被调用,Start函数和脚本挂载对象与脚本实例的启用禁用有关。
- 可以按需要调整延迟初始化代码,允许你协调初始化顺序。
Awake和Start相同点和不同点:
- Awake是在所有对象初始化完成,并且加载脚本实例的时候调用,Start是在Update第一次执行前调用,并且是在所有的Awake执行完成后调用。
- Awake函数的执行和脚本实例的是否启用无关,Start函数只有在脚本实例启用的时候才会调用。
- Awake不能充当协程,Start可以充当协程,可以按需延迟初始化代码 。
- Awake和Start在整个生命周期中只会被调用一次。
3、Physics
- FixedUpdate()
FixedUpdate为固定帧更新,主要用于物理更新,可设置帧步长,默认为0.02s。 - OnTriggerEnte()
- 当进入触发器时执行
- OnTriggerStay ()
- 当逗留触发器执行,每帧被调用
- OnTriggerExit ()
- 当退出触发器时执行
- OnColissionEnter()
- 当进入碰撞器时执行
- OnColissionStay()
- 当逗留碰撞器执行,每帧被调用
- OnColissionExit()
- 当退出碰撞器时执行
4、Input Event
- OnMouseEnter()
当鼠标进入UI元素或Collider时调用 - OnMouseExit()
当鼠标退出UI元素或Collider时调用 - OnMouseDown()
当在UI元素或Collider按下鼠标时调用 - OnMouseUp()
当在UI元素或Collider释放鼠标时调用 - OnMouseDrag()
当用户在UI元素或Collider按下并拖动时调用 - OnMouseOver()
当鼠标在UI元素或Collider上悬浮时调用 - OnMouseUpAsButton()
当在同一UI元素或Collider上按下鼠标,再松开时调用
5、Game Logic
- Update()
Update每帧更新,用于处理游戏的核心逻辑 - LateUpdate()
LateUpdate每帧更新,并且在所有Update执行完成之后执行
可以将摄像机跟随放在这里,确保角色计算完毕后摄像机跟随,防止摄像机无法看到角色的现象。
6、Scene Rendering
-
Camera.OnPreCull()
在裁剪计算相机剔除场景之前调用此函数 -
Object.OnBecameVisible()
在对象对于任意相机可见时,调用该函数,在裁剪计算完成后,会触发对象可见性 -
Object.OnBecameInVisible()
在对象对于任意相机不可见时调用该函数,在裁剪计算完成后,会触发对象可见性 -
Object.OnWillRenderObject()
完成剔除过程后,如果对象可见,则为每个摄像机调用 OnWillRenderObject。 -
Camera.OnPreRender()
在相机开始渲染场景之前调用此函数。 -
Camera.OnPostRender()
在相机完成场景渲染后调用此函数。 -
Camera or Object.OnRenderObject()
在完成所有常规场景渲染后调用此函数。此时,可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。
7、Gizmo Rendering
- OnDrawGizmos()
Editor调用, 用于在场景视图中绘制辅助图标以实现可视化。
8、GUI Rendering
- OnGUI()
每帧调用多次,用于响应GUI事件
9、Pausing
- OnApplicationPause()
当程序暂停时调用
10、Disable
- OnDisable()
当游戏对象或脚本实例变为不可用或未激活状态时调用,当游戏对象被销毁时也会执行
11、Decommissioning
- OnDestroy()
当将对象销毁时调用 - OnApplicationQuit()
在退出应用时调用

| 每一次跌倒都是一次成长 每一次努力都是一次进步 |
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!
相关文章:
Unity之Unity面试题(三)
内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之Unity面试题(三) TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取…...
Linux命令-dos2unix命令(将DOS格式文本文件转换成Unix格式)
说明 dos2unix命令 用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以 \r\n 作为断行标志的,表示成十六进制就是0D0A。而Unix下的文本文件是以\n作为断行标志的,表示成…...
企业怎么做数据分析
数据分析在当今信息化时代扮演着至关重要的角色。能够准确地收集、分析和利用数据,对企业的决策和发展都具有重要意义。数聚将介绍企业如何合理地利用数据分析,如何协助企业在竞争激烈的市场中取得优势。 一、建立完善的数据收集系统 在进行数据分析之…...
1111111111
c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…...
[面向对象] 单例模式与工厂模式
单例模式 是一种创建模式,保证一个类只有一个实例,且提供访问实例的全局节点。 工厂模式 面向对象其中的三大原则: 单一职责:一个类只有一个职责(Game类负责什么时候创建英雄机,而不需要知道创建英雄机要…...
《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?
问题 JS原始类型有6种Undefined, Null, Number, String, Boolean, Symbol共6种。 在对原始类型使用typeof进行判断时, typeof stringValue string typeof numberValue number 如果一个变量(nullValue)的值为null,那么typeof nullValue "?" const u …...
【项目实战经验】DataKit迁移MySQL到openGauss(下)
上一篇我们分享了安装、设置、链接、启动等步骤,本篇我们将继续分享迁移、启动~ 目录 9. 离线迁移 9.1. 迁移插件安装 中断安装,比如 kill 掉java进程(安装失败也要等待300s) 下载安装包准备上传 缺少mysqlclient lib包 mysq…...
AI预测体彩排3第2弹【2024年4月13日预测--第1套算法开始计算第2次测试】
各位小伙伴,今天实在抱歉,周末回了趟老家,回来比较晚了,数据今天上午跑完后就回老家了,晚上8点多才回来,赶紧把预测结果发出来吧,虽然有点晚了,但是咱们前面说过了,目前的…...
【13137】质量管理(一)2024年4月串讲题组一
目录 1.选择题 2.多选题 3.简答题 4.论述题 5.计算题 6.论述题 【13137】质量管理-速 记 宝 典【全国通用】</...
Go语言中工作负载类型对并发的影响
在实际工作开发中我们需要根据工作负载是CPU密集型还是I/O密集型,使用不同的方式来解决问题。下面我们先来看这些概念,然后再讨论其影响。 在程序执行时,工作负载的执行时间会受以下因素限制: CPU的速度--例如,运行归并排序算法。工作负载被称为CPU密集型。I/O速度--例如…...
常用的Python内置函数
目录 1. getattr() 函数: 2. setattr() 函数: 3. id():返回对象的唯一标识符(内存地址)。 4. type():返回对象的类型。 5. isinstance(obj, classinfo):判断对象是否是某种类型或其子类的实例。 6. issubclass(class1, class2):判断一个类是否是另一个类的子类。 …...
MAC(M1芯片)编译Java项目慢且发热严重问题解决方案
目录 一、背景二、排查三、解决四、效果以及结果展示五、总结 一、背景 使用idea编译项目等操作,经常性发热严重,并且时间慢。直到昨天编译一个项目用时30分钟,电脑温度很高,并且有烧灼的味道,于是有了此篇文章。 二、…...
如何循环pandas格式的数据
如何循环pandas格式的数据 要循环处理 Pandas 格式的数据,可以使用 iterrows() 方法或者 iteritems() 方法。 iterrows() 方法: import pandas as pd# 假设 df 是你的 Pandas DataFrame for index, row in df.iterrows():# 在这里处理每一行的数据&am…...
新零售SaaS架构:客户管理系统架构设计(万字图文总结)
什么是客户管理系统? 客户管理系统,也称为CRM(Customer Relationship Management),主要目标是建立、发展和维护好客户关系。 CRM系统围绕客户全生命周期的管理,吸引和留存客户,实现缩短销售周…...
Apache Spark
Apache Spark是一种开源的分布式计算系统,主要用于大数据处理和分析。Spark提供了一个高效的计算引擎,可以在分布式环境中处理大规模数据集。它支持多种编程语言,包括Scala、Java、Python和R。 Spark的核心概念是弹性分布式数据集࿰…...
CentOS7编译ZLMediaKit并使能WebRTC
使能WebRTC需要libsrtp库, libsrtp库需要openssl, 所以第一步先安装openssl, 系统自带的版本是1.0.2的, libsrtp需要1.1.1以上版本, 需要使用源码进行编译; GCC准备 需要安装gcc7以上版本, 并切换到gcc7的编译环境 yum install centos-release-scl yum install devtoolset-7…...
【数据交换格式】网络socket编程温度采集智能存储与上报项目技术------JSON、TLV
作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…...
IP地址定位技术在各领域的作用
IP地址定位是通过确定IP地址的物理位置来定位一个设备的技术,它在现代社会的多个领域中都有着广泛的应用。以下将详细探讨IP地址定位的应用场景,以期对读者有所启发。 首先,在网络安全领域,IP地址定位发挥着至关重要的作用。网络…...
代码随想录 538. 把二叉搜索树转换为累加树
题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件&a…...
JavaWeb--前端--01HTML和CSS
文章目录 1 前端开发介绍2 开发工具3 文档查阅4 VSCode的插件 1 前端开发介绍 Web标准也称为网页标准,由一系列的标准组成,大部分由W3C( World Wide Web Consortium,万维网联盟)负责制定。由三个组成部分:…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
