Unity之Unity面试题(三)

news2024/12/22 19:33:05

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

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

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

助力快速掌握 面试题

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

请添加图片描述

文章目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单工厂模式大解析:让代码创造更高效、更智能!

个人主页: danci_ 🔥系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章:探索设计模式的魅力:简单工厂模式 简单工厂模式&#x…

【零基础学数据结构】双向链表

1.双向链表的概念 1.1头节点 1.2带头双向循环链表 注意: 哨兵位创建后,首尾连接自己 1.3双链表的初始化 // 双向链表的初始化 void ListInit(ListNode** pphead) {// 给双链表创建一个哨兵位*pphead ListBuyNode(-1); } 2.双向链表的打印 // 双向…

PE文件的分析和构造超详细过程

本文详细讲述如何从0构造一个PE文件,运行该文件会弹出一个HelloPE的窗口 目录 预备知识 1. 构造DOS头IMAGE_DOS_HEADER 1.1 构造DOS_MZ头 1.2 构造DOS_STUB 2、构造PE头IMAGE_NT_HEADERS 248字节 2.1 signature 2.2 IMAGE_FILE_HEADER 2.3 IMAGE_OPTI…

MOS管电路的应用及注意事项

1,buck电路的上下桥死区时间多少合适 死区时间由驱动芯片控制的,外围电路增加阻容会导致上升沿时间变长 死区时间从单片机PWM到驱动电路再到MOS管的栅极都有一定的硬件延时,所以具体时间需要根据调试确定。 例如充电芯片的buck电路,有死区配置…

mysql8.0高可用集群架构实战

MySQL :: MySQL Shell 8.0 :: 7 MySQL InnoDB Cluster 基本概述 InnoDB Cluster是MySQL官方实现高可用读写分离的架构方案,其中包含以下组件 MySQL Group Replication,简称MGR,是MySQL的主从同步高可用方案,包括数据同步及角色选举Mysql Shell 是InnoDB Cluster的管理工具,用…

数据库系统概论(超详解!!!)第四节 数据库安全性

问题的提出: 数据库的一大特点是数据可以共享 数据共享必然带来数据库的安全性问题 数据库系统中的数据共享不能是无条件的共享。 1.数据库的安全概述 数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏 。 系统安全保护措施是否有效…

基于ssm的土家风景文化管理平台(java源码+文档)

项目简介 土家风景文化管理平台实现了以下功能: 土家风景文化管理平台的主要使用者分为管理员:管理员使用本平台涉到的功能主要有:首页,个人中心,用户管理,景点分类管理,热门景点管理&#xf…

深度学习学习日记4.7

1.梯度下降 w 新 w旧 - 学习率梯度 训练的目的就是让 loss 减小 2.前向传播进行预测, 反向传播进行训练(每一个参数通过梯度下降进行更新参数),(1前向传播 2求 loss 3反向传播 4梯度更新) 能够让损失下降的参数,就是更好的参数。 损失…

基于SSM物业管理系统

摘要 进入二十一世纪以来,计算机技术蓬勃发展,人们的生活发生了许多变化。很多时候人们不需要亲力亲为的做一些事情,通过网络即可完成以往需要花费很多时间的操作,这可以提升人们的生活质量。计算机技术对人们生活的改变不仅仅包…

单列模式1.0

单列模式 单例模式能保证某个类在程序中只存在唯⼀⼀份实例, ⽽不会创建出多个实例 1.饿汉模式 只要程序一启动就会立即创建出一个对象 class Signleton{private static Signleton instancenew Signleton();//防止在以后的代码中再创建对象,我们将构造方法private,…

FreeFileSync|本地自动备份设置教程,终于可以不用手动同步了

前言 昨天小白给各位小伙伴分享了FreeFileSync软件,由于篇幅过长,所以整个教程中并没有教小伙伴们如何设置自动同步的办法。 今天小白就来唠唠:如何让FreeFileSync自动同步。 教程分为几种: 开机自动同步 开机之后自动执行一次…

LeetCode617:合并二叉树

题目描述 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重…

天地人和•大道不孤——卢禹舜中国画作品展在重庆美术馆隆重开幕

2024年4月12日,由中国国家画院、重庆市文化和旅游发展委员会主办,重庆美术馆(重庆画院、重庆国画院)、北京八荒锦绣美术馆、中国国际文化交流基金会卢禹舜艺术基金承办的“天地人和•大道不孤——卢禹舜中国画作品展”开幕式在重庆…

SF58-ASEMI适配器二极管SF58

编辑:ll SF58-ASEMI适配器二极管SF58 型号:SF58 品牌:ASEMI 封装:DO-27 最大平均正向电流(IF):5A 最大循环峰值反向电压(VRRM):600V 最大正向电压&…

C语言函数指针应用——计算器(转移表)的使用

对与上一节,我们对指针函数已经有了深刻意识了;练一练吧 如果还没有学习到,也是没有关系的,可以看一看这一篇 C语言详解指针-CSDN博客https://blog.csdn.net/Asuku_/article/details/137690083希望能提高你对指针的理解 计算器的实…

使用Riverpod在Flutter中创建Todo列表

使用Riverpod在Flutter中创建Todo列表 视频 https://youtu.be/mlbeSD1KSIo https://www.bilibili.com/video/BV1jj42197c8/ 前言 原文 https://ducafecat.com/blog/flutter-todo-list-with-riverpod-guide-02 学习如何使用Riverpod在Flutter中构建一个功能完整的Todo列表应用…

《AI创业浪潮:展望未来,解锁颠覆性创新机遇》

在科技革命的浪潮中,人工智能(AI)犹如一艘引领航向的旗舰,以其强大的变革力量重塑各行各业。随着技术的日益成熟与应用场景的不断拓宽,AI技术为创业者铺就了一条充满机遇与挑战的道路。本文将深入探讨未来AI技术领域的…

CPU问题排查

经常发现生产环境CPU运行很高,我们想知道到底是什么代码这么消耗CPU TOP命令 此时我们经常使用top来找到 CPU 使用率比较高的一些线程 容器中的docker 备注: 如果是docker 中的top命令。需要关注,一般来说不需要,挂载内容的多…

TSINGSEE青犀AI智能分析网关V4叉车载货出入库检测算法介绍及应用

随着物流行业的快速发展,叉车作为物流运输的重要设备,其安全性和效率性越来越受到人们的关注。然而,在实际操作中,由于人为因素和操作环境的复杂性,叉车事故时有发生,给企业和个人带来了巨大的损失。为了提…

cbv源码

cbv源码 【1】什么是查找顺序 对象属性的查找顺序: 首先在对象自身的命名空间(属性字典)中查找属性。如果在对象自身的命名空间中没有找到,则会向上查找该对象的类(class)的命名空间,直到找到…