网站名字起什么好处,网站建设方案项目背景意义,网站建设人员的工资分配,网络服务商机构域名内容将会持续更新#xff0c;有错误的地方欢迎指正#xff0c;谢谢! Unity之Unity面试题#xff08;三#xff09; TechX 坚持将创新的科技带给世界#xff01; 拥有更好的学习体验 —— 不断努力#xff0c;不断进步#xff0c;不断探索 TechX —— 心探索、心进取…内容将会持续更新有错误的地方欢迎指正谢谢! Unity之Unity面试题三 TechX 坚持将创新的科技带给世界 拥有更好的学习体验 —— 不断努力不断进步不断探索 TechX —— 心探索、心进取 助力快速掌握 面试题 为面试者节省宝贵的学习时间避免困惑 文章目录 一、Unity提供了几种光源分别有什么二、两个物体发生碰撞的条件接触的方式有什么碰撞有几个阶段对应的函数是什么三、CharacterController组件四、Unity 对物体施加力的方式有几种描述一下1、力的方式2、 力的模式 五、Unity的生命周期安函数分别在什么时候执行1、Editor2、Initialization3、Physics4、Input Event5、Game Logic6、Scene Rendering7、Gizmo Rendering8、GUI Rendering9、Pausing10、Disable11、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() 在退出应用时调用 TechX —— 心探索、心进取 每一次跌倒都是一次成长 每一次努力都是一次进步 END 感谢您阅读本篇博客希望这篇内容对您有所帮助。如果您有任何问题或意见或者想要了解更多关于本主题的信息欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。 如果您喜欢本博客请点赞和分享给更多的朋友让更多人受益。同时您也可以关注我的博客以便及时获取最新的更新和文章。 在未来的写作中我将继续努力分享更多有趣、实用的内容。再次感谢大家的支持和鼓励期待与您在下一篇博客再见