当前位置: 首页 > news >正文

Unity之Unity面试题(三)

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

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

相关文章:

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编译项目等操作&#xff0c;经常性发热严重&#xff0c;并且时间慢。直到昨天编译一个项目用时30分钟&#xff0c;电脑温度很高&#xff0c;并且有烧灼的味道&#xff0c;于是有了此篇文章。 二、…...

如何循环pandas格式的数据

如何循环pandas格式的数据 要循环处理 Pandas 格式的数据&#xff0c;可以使用 iterrows() 方法或者 iteritems() 方法。 iterrows() 方法&#xff1a; import pandas as pd# 假设 df 是你的 Pandas DataFrame for index, row in df.iterrows():# 在这里处理每一行的数据&am…...

新零售SaaS架构:客户管理系统架构设计(万字图文总结)

什么是客户管理系统&#xff1f; 客户管理系统&#xff0c;也称为CRM&#xff08;Customer Relationship Management&#xff09;&#xff0c;主要目标是建立、发展和维护好客户关系。 CRM系统围绕客户全生命周期的管理&#xff0c;吸引和留存客户&#xff0c;实现缩短销售周…...

Apache Spark

Apache Spark是一种开源的分布式计算系统&#xff0c;主要用于大数据处理和分析。Spark提供了一个高效的计算引擎&#xff0c;可以在分布式环境中处理大规模数据集。它支持多种编程语言&#xff0c;包括Scala、Java、Python和R。 Spark的核心概念是弹性分布式数据集&#xff0…...

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

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…...

IP地址定位技术在各领域的作用

IP地址定位是通过确定IP地址的物理位置来定位一个设备的技术&#xff0c;它在现代社会的多个领域中都有着广泛的应用。以下将详细探讨IP地址定位的应用场景&#xff0c;以期对读者有所启发。 首先&#xff0c;在网络安全领域&#xff0c;IP地址定位发挥着至关重要的作用。网络…...

代码随想录 538. 把二叉搜索树转换为累加树

题目 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下&#xff0c;二叉搜索树满足下列约束条件&a…...

JavaWeb--前端--01HTML和CSS

文章目录 1 前端开发介绍2 开发工具3 文档查阅4 VSCode的插件 1 前端开发介绍 Web标准也称为网页标准&#xff0c;由一系列的标准组成&#xff0c;大部分由W3C&#xff08; World Wide Web Consortium&#xff0c;万维网联盟&#xff09;负责制定。由三个组成部分&#xff1a;…...

Oracle SQL中的DECODE函数与NVL函数:区别与应用场景详析

Oracle SQL中的DECODE函数与NVL函数&#xff1a;区别与应用场景详析 引言1. NVL函数简介与使用示例2. DECODE函数简介与使用示例3. NVL与DECODE函数的区别4. 使用场景举例结论 引言 在Oracle数据库开发和数据分析过程中&#xff0c;DECODE函数和NVL函数都是非常实用且常见的工具…...

算法设计与分析实验报告c++实现(N皇后问题、卫兵布置问题、求解填字游戏问题、图的m着色问题)

一&#xff0e;N皇后问题 基本原理和思路&#xff1a; 从一条路往前走&#xff0c;能进则进&#xff0c;不能进则退回来&#xff0c;换一条路再试。在包含问题的所有解的解空间树中&#xff0c;按照深度优先搜索的策略&#xff0c;从根结点出发深度探索解空间树。当探索到某一…...

深入探索Linux中的libgdbus:GDBus库的应用和实现

引言 在Linux系统中&#xff0c;DBus是一种高效的进程间通信&#xff08;IPC&#xff09;机制&#xff0c;广泛应用于桌面环境和系统服务之间的通信。GDBus是基于GLib库的DBus实现&#xff0c;作为libgdbus的一部分提供。它旨在提供一种简洁、高效的方式来实现DBus通信。通过深…...

MacOS下Qt 5开发环境安装与配置

最近笔者在MacOS中使用Qt Creator开发Qt程序时遇到了一些问题&#xff0c;在网上查了不少资料&#xff0c;都没有找到解决方案&#xff0c;只有自己进行研究摸索了&#xff0c;今天晚上终于将目前遇到的问题全部解决了&#xff0c;特记录下来分享给大家。 笔者使用的是MacOS 1…...

jquery 实现倒计时

$(".tableText").click(function () { var time 60; var timer setInterval(function(){ time--; $(".tableText").text("&#xff08;"time"秒&#xff09;重发"); if(time0){ clearI…...

MYSQL 5.7重置root密码

Mysql 5.7重置root密码 如果您忘记了MySQL 5.7的root密码&#xff0c;可以通过以下步骤重置&#xff1a; 停止MySQL服务。在命令行中输入以下命令&#xff1a; systemctl stop mysqld启动MySQL服务并跳过授权表。在命令行中输入以下命令&#xff1a; mysqld_safe --skip-gra…...

博客永久链接与计数

概述 工欲善其事&#xff0c;必先利其器。 对自己的博客不好用不满意很久了&#xff0c;但是这几年太懒。想趁着放假弄一下吧&#xff0c;发现几年没动&#xff0c;版本升级后很多东西变了&#xff0c;折腾了一下午效果不太理想。先记录一下。 问题 博客链接中有中文&#x…...

基于 RisingWave 和 ScyllaDB 构建事件驱动应用

概览 在构建事件驱动应用时&#xff0c;人们面临着两大挑战&#xff1a;1&#xff09;低延迟处理大量数据&#xff1b;2&#xff09;实现流数据的实时摄取和转换。 结合 RisingWave 的流处理功能和 ScyllaDB 的高性能 NoSQL 数据库&#xff0c;可为构建事件驱动应用和数据管道…...

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

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

GRE/MGRE详解

GRE GRE&#xff1a;通用路由封装&#xff0c;是标准的三层隧道技术&#xff0c;是一种点对点的隧道技术&#xff1b; 该技术可以实现不同的网络之间安全的访问&#xff1b; 如上&#xff1a;可以使用该技术搭建一条专线&#xff0c;实现公司A与分公司A1之间相互通信&#xf…...

wordpress 网站图标设置方法/网络推广如何收费

注&#xff1a;可以通过 yum grouplist 来查看可能批量安装哪些列表从Windows转到Linux下面&#xff0c;一个不习惯的地方就是在图形界面下安装和删除软件的时候非常缓慢。但是如果你掌握了用yum的命令行模式进行 配置程序&#xff0c;你肯定会从心底喜欢上这个强大的工具。因为…...

网络营销网站建设公司/搜索引擎营销方案

注意与最长公共子序列的不同 还是对状态的定义不是很了解 #include<cstdio> #include<cstring> #include<algorithm> using namespace std;const int maxn 100 10; char line1[maxn]; char line2[maxn];int d[maxn][maxn]; int vis[maxn][maxn];int dp(int…...

美食网网站建设目的/安徽网站关键词优化

length(object) #显示对象中元素/成分个数,length("")1 dim(object) #显示某个对象维度,行数与列数 names(object) #显示对象中各元素/成分名称 rm(object1,object2,...) #删除一个或者多个对象 nchar(x) #计算字符串x的长度,对于非字符对象不能用该函数,nchar(&quo…...

南宁网站制作-中国互联/优化设计官方电子版

安装前先关闭杀毒软件和360卫士&#xff0c;注意安装路径不能有中文&#xff0c;安装包路径也不要有中文。[安装环境]&#xff1a;Win7/Win8/Win101.鼠标右击【VMware 15.5.0】压缩包选择【解压到VMware 15.5.0】。2.双击打开解压后的【VMware 15.5.0】文件夹。3.鼠标右击【VMw…...

做网站市场大不大/关键词推广方式

要提高查询速度&#xff0c;一般&#xff1a;1.不需要删除的字段&#xff0c;建主键&#xff1b;有可能要被删除的字段&#xff0c;建索引。2.假如一次提交5W个号码&#xff0c;每个都要和数据库里90W号码进行比较5W个号码中哪些号码是90W号码中的。那么将90W号码建一个表&…...

网站如何做关键词优化/杭州网站优化推荐

remote-control 可以让用户通过外部接口控制应用程序音乐, 官方建议的做法是在View显示的时候接收remote-control事件 [c-sharp] view plaincopy - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [[UIApplication sharedApplication…...