Unity之Unity面试题(三)

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

Unity之Unity面试题(三)
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 面试题

为面试者节省宝贵的学习时间,避免困惑!

![请添加图片描述](https://img-blog.csdnimg.cn/direct/b1a7447201d740049458302fb61f865a.jpeg)

文章目录

  • 一、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提供了几种光源,分别有什么?


  1. Directional Light 平行光
  2. Point Light 点光源
  3. Spot Light 聚光灯
  4. Area Light 区域光 无法作用与实时光照,一般用于光照贴图烘焙


二、两个物体发生碰撞的条件?接触的方式有什么?碰撞有几个阶段,对应的函数是什么?


  1. 两个碰撞的物体都必须有Collider组件,且至少一个物体有Rigidbody组件
  2. 其中运动的那个物体必须有Rigidbody组件,另一个物体可以带可以不带

对于有Rigidbody组件的物体,我们可以把它当作一个有质量且受力作用的刚体,而没有该组件的物体,我们认为它是静态物体,不受力的影响

物体碰撞有两种接触方式:

  1. Collision碰撞 造成物理碰撞
    条件: 两个碰撞器都不要勾选isTrigger,运动的那个Rigidbody不要勾选Is Kinematic,当为true时,物体不受物理引擎的影响
  • 进入碰撞器 OnCollisionEnter()
  • 停留碰撞器 OnCollisionStay()
  • 退出碰撞器 OnCollisionExit()
  1. Trigger触发 取消所有的物理碰撞
    条件: 至少有一个碰撞器需要勾选isTrigger
  • 进入碰撞器 OnTriggerEnter()
  • 停留碰撞器 OnTriggerStay()
  • 退出碰撞器 OnTriggerExit()


三、CharacterController组件


  1. CharacterController为角色控制器,角色控制器一般用于第一人称或第三人称游戏主角的控制。

  2. 添加了CharacterController组件后,人物将不受外力的作用,即使添加Rigidbody组件,并启用重力,人物不会受力的作用,也就是说CharacterController屏蔽了Rigidbody的属性和方法(前提是调用了CharacterController类里面的方法)。

  3. 控制角色控制器移动有两种方法:

    • SimpleMove() 简单移动,会自动应用重力
    • Move() 复杂运动,不会应用重力
  4. 角色控制器不受外力的作用,但是可以进行碰撞检测,一般碰撞的条件是两个碰撞的物体都必须有Collider组件,并且至少有一个Rigidbody组件,但是如果一方有CharacterController组件,则另一方只要有Collider组件就可以产生碰撞,CharacterController本身就继承了Collider类。

  5. CharacterController不受外力的作用,同时也不会对它所碰撞的物体施加力的作用,3 除非在OnControllerColliderHit()回调中对被碰撞的物体的Rigidbody上施加力

总结:CharaterController 不受物理引擎的影响,即使添加了Rigidbody,但是他的运动受制于碰撞。


四、Unity 对物体施加力的方式有几种,描述一下


1、力的方式

  1. Rigidbody.AddForce()
    在世界坐标系中,对刚体上添加一个力
  2. Rigidbody.AddRelativeForce()
    相对自身坐标系,对刚体添加一个力
  3. Rigidbody.AddTorque()
    在世界坐标系中,对刚体上添加一个力矩
  4. Rigidbody.AddRelativeTorque()
    相对自身坐标系,对刚体添加一个力矩
  5. Rigidbody.AddForceAtPosition()
    在物体表面添加一个力,相当于对物体施加了一个力和力矩
  6. 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相同点和不同点:

  1. Awake是在所有对象初始化完成,并且加载脚本实例的时候调用,Start是在Update第一次执行前调用,并且是在所有的Awake执行完成后调用。
  2. Awake函数的执行和脚本实例的是否启用无关,Start函数只有在脚本实例启用的时候才会调用。
  3. Awake不能充当协程,Start可以充当协程,可以按需延迟初始化代码 。
  4. 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()
    在退出应用时调用

在这里插入图片描述





TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步

END
感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/530366.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2025考研数学汤家凤基础班百度网盘视频+强化班PDF讲义持续更新

如果25考研想全程跟张宇老师,可以参考下面这个表格来使用资料: 2025考研数学全程课:链接:https://pan.baidu.com/s/1e6wA4OiH_EJpZPXPxoHYwg 提取码:om45 考研数学 考研数学无非就是汤家凤老师,张宇老师…

政安晨:【深度学习神经网络基础】(五)—— 霍普菲尔德神经网络和玻尔兹曼机

目录 简述 霍普菲尔德神经网络 训练霍普菲尔德神经网络 Hopfield-Tank神经网络 玻尔兹曼机 总之 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处&am…

Linux安装Oracle11g(无图形界面下的静默安装)

Oracle11g安装文档-Linux静默安装 环境准备安装数据库配置监听器创建数据库测试打开防火墙 环境准备 创建组和用户 [rootlocalhost ~]# groupadd oinstall #创建oinstall组 [rootlocalhost ~]# groupadd dba  #创建dba组 [rootlocalhost ~]# useradd -g oinstall -G dba -m…

【快捷部署】016_Ollama(CPU only版)

📣【快捷部署系列】016期信息 编号选型版本操作系统部署形式部署模式复检时间016Ollama(CPU only)latestCentOS 7.XDocker单机2024-04-10 注意事项: 1、目前镜像及大模型下载速度尚可,但由于容量较大,所以…

K8S:常用资源对象操作

文章目录 一、使用Replication Controller(RC)、Replica Set(RS) 管理Pod1 Replication Controller(RC)2 Replication Set(RS) 二、Deployment的使用1 创建2 滚动升级3 回滚Deployment三、 Pod 自动扩缩容HPA1 使用kubectl autosc…

thinkphp5关联预载入with指定字段属性查询

一、thinkphp5.0 如果要指定属性查询,可以使用: $list User::field(id,name)->with([profile>function($query){$query->field(email,phone);}])->select([1,2,3]); foreach($list as $user){// 获取用户关联的profile模型数据dump($user…

典型新能源汽车热管理系统方案分析

目前行业具有代表性的热管理系统有PTC电加热方案、热泵方案(特斯拉八通阀热泵、吉利直接式热泵)、威马的柴油加热方案以及以理想为代表的插电式混动车方案。 小鹏P7整车热管理方案分析(PTC电加热方案) 小鹏P7作为小鹏汽车的第2款…

NzN的数据结构--插入排序

排序排序我要Disney,今天我们先来看看经典排序算法里的插入排序,先三连后看才是好习惯!!! 目录 一、排序的概念及应用 1. 排序的概念 2. 排序的应用 3. 常见的排序算法 二、插入排序 1. 基本思想 2. 直接插入排…

pyside6的QSpinBox自定义特性初步研究(二)

当前的需求是,蓝色背景的画面,需要一个相对应色系的QSpinBox部件。已有的部件风格是这样的,需要新的部件与之般配。 首先新建一个QDoubleSpinBox,并定义其背景色和边框: QDoubleSpinBox { color: white; border:1px…

Vue3---基础1(认识,创建)

变化 相对于Vue2,Vue3的变化: 性能的提升 打包大小减少 41% 初次渲染快 55%,更新渲染快133% 内存减少54% 源码的升级 使用 proxy 代替 defineProperty 实现响应式 重写虚拟 DOM 的实现和 Tree-shaking TypeScript Vue3就可以更好的支持TypeSc…

Python:如何对FY3D TSHS的数据集进行重投影并输出为TIFF文件以及批量镶嵌插值?

完整代码见 Github:https://github.com/ChaoQiezi/read_fy3d_tshs,由于代码中注释较为详细,因此博客中部分操作一笔带过。 01 FY3D的HDF转TIFF 1.1 数据集说明 FY3D TSHS数据集是二级产品(TSHS即MWTS/MWHS 融合大气温湿度廓线/稳定度指数/…

ssm“最多跑一次”微信小程序

采用技术 ssm“最多跑一次”微信小程序的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 系统实现的功能 本次设计任务是要设计一个“最多跑一次”微信小程序,…

【攻防世界】php_rce (ThinkPHP5)

进入题目环境,查看页面信息: 页面提示 ThinkPHP V5,猜测存在ThinkPHP5 版本框架的漏洞,于是查找 ThinkPHP5 的攻击POC。 构造 payload: http://61.147.171.105:50126/?sindex/think\app/invokefunction&functioncall_user_f…

JVM-结合MAT工具分析OOM问题

JVM-结合MAT工具分析OOM问题 启动项目前配置VM参数 -XX:UseParNewGC -XX:UseConcMarkSweepGC -Xms1m #初始化大小 -Xmx1m #最大值 -XX:PrintGCDetails -Xloggc:gc_dandan.log -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./运行结果截图 使用MAT打开java_pid12164.hprof…

开源铱塔切换MySQL数据库启动报异常

1.错误日志: 铱塔切换数据库配置为MySQL之后,启动后报错如下: SqlExceptionHelper - Table iotkit.task_info doesnt exist SqlExceptionHelper - Table iotkit.rule_info doesnt exist SqlExceptionHelper - Table iotkit.device_info does…

【Java8新特性】二、函数式接口

这里写自定义目录标题 一、什么是函数式接口二、自定义函数式接口三、作为参数传递 Lambda 表达式四、四大内置核心函数式接口1、消费形接口2、供给形接口3、函数型接口4、断言形接口 一、什么是函数式接口 只包含一个抽象方法的接口,称为函数式接口。你可以通过 L…

1、JVM相关知识点-类加载机制

JVM类加载机制 当我们用java命令运行某个类的main函数启动程序时,首先需要通过 类加载器 把主类加载到 JVM 通过Java命令执行代码的大体流程如下: 其中loadClass的类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 &…

Nginx反向代理与Tomcat实现ssm项目前后端分离部署

Nginx nginx是一款http和支持反向代理的web服务器,以其优越的性能被广泛使用。以下是百度百科的介绍。 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.…

解析大语言模型训练三阶段

大语言模型的训练过程一般包括3个阶段:预训练(Pre-training)、SFT(有监督的微调,Supervised-Finetuning)以及RLHF(基于人类反馈的强化学习,Reinforcement Learning from Human Feedb…

maxpool long数据类型报错

报错: RuntimeError: “max_pool2d” not implemented for ‘Long’ 源码: import torch from torch import nn from torch.nn import MaxPool2dinput torch.tensor([[1, 2, 0, 3, 1],[0, 1, 2, 3, 1],[1, 2, 1, 0, 0],[5, 2, 3, 1, 1],[2, 1, 0, 1, 1…