Unity3D 实用技巧 - 物理系统初识(一)

本文深入讲解Unity中的物理系统,包括3D和2D物理引擎,关键组件如刚体、碰撞器、触发器、关节和角色控制器的功能及使用方法。探讨了物理材质、碰撞检测和触发事件,以及如何优化性能。
Unity中实际上有两个独立的物理引擎:一个用于3D物理,另一个用于2D物理。两个引擎的主要概念是相同的,但是它们是使用不同的组件实现的。例如,Rigidbody和Rigidbody2D。物理系统主要由以下几部分组成:Rigidbody(刚体)、Collider(碰撞器)、Triggers(触发器) 、Joint(关节)、Character Controller(角色控制器)。
1、Rigidbody(刚体)/ Rigidbody2D(2D刚体) 在使用Unity中如果想要GO拥有重力,可以发生碰撞反馈等,那就必不可少需要添加一个组件Rigidbody。由于该组件代替了它本身的运动,所有不应该通过Transform来改变位置,旋转;相反应该使用Forces来推动GO并让物理引擎计算结果。 Rigidbody组件拥有一个Is Kinematic 的属性,该属性可以将其从引擎的控制中移除,从而可以用脚本控制GO的运动。注意:尽量不要使用脚本控制该属性的开关。 Sleeping:当刚体的速度远低于一个设定的最小线性速度时,物理引擎就会认为它陷入睡眠状态。此时,GO不会再次移动,直到它收到一个讯号。这种模式意味着处理器不会花费时间更新刚体状态。可以使用WakeUp函数来唤醒GameObject。
2、Colliders(碰撞器) Colliders组件为物理碰撞定义了一个物体的形状。它不需要完全符合GO的网格形状;事实上,大致相似在游戏中更加有效率。 Unity中最简单的几种碰撞器: Box Collider、Sphere Collider 、Capsule Collider、Wheel Collider和Terrain Colllider;2D碰撞器:Collider 2D 和 Circle Collider 2D。 有时候需要以组合的形式附加到物体上,这种形式可以保持较低的处理器开销,也增加一定的灵活性;但它们应该只有一个Rigidbody组件在父物体上。那组合的碰撞器也不能满足我们的需求,这就需要 Mesh Collider;它可以精确的匹配对象的网格形状。但不要经常使用,它对性能的要求挺高。需要碰撞检测的时候可以把它设置为Convex,它一般被使用在几何图形上。物体可以被单独添加一个碰撞器(可以没有刚体),不过一般这个物体是静态的。
另外我们可以在碰撞中可以设置Physics materials(物理材质) 物体之间相互碰撞的时候,物体表面会模拟它身上材质的属性,比如冰块,篮球等;物体的摩擦系数,弹性系数可以用物理材质来配置。
3、Triggers(触发器) 通过脚本可以通过OnCollisionEnter启动检测什么时候发生的碰撞,也可以通过修改碰撞器上Is Trigger,来启动是否需要碰撞检测。启动之后会允许碰撞物体穿过,穿过的时候将调用物体脚本的OnTriggerEnter函数:
    
Is Trigger = falseOnCollisionEnter //碰撞第一次调用 OnCollisionStay //保持碰撞中调用 OnColliosionExit //退出碰撞时调用 Is Trigger = trueOnTriggerEnter //进入触发器 OnTriggerStay //停留触发器 OnTriggerExit //离开触发器
【重点说明】 碰撞触发函数主要有两类,一类是碰撞器的,一类是触发器的。每类有三种,分别是进入、保持和离开。   OnTriggerEnter, OnTriggerStay, OnTriggerExit 是触发类消息,参数是Collider。   OnCollisionEnter, OnCollisionStay, OnCollisionExit 是碰撞类消息,参数是Collision。   下面看一下各种情况的触发条件:   首先说明一下,碰撞器的种类。   Static Collider:静态碰撞器。有Collider,没有Rigidbody,没有Trigger。   Rigidbody Collider:刚体碰撞器。有Collider,有Rigidbody,没有Trigger   Kinematic Rigidbody Collider:运动学刚体。有Collider,有Rigidbody,刚体是Kinematic,没有Trigger。   Static Trigger Collider:静态触发器。有Collider,没有Rigidbody,有Trigger。   Rigidbody Trigger Collider:刚体触发器。有Collider,有Rigidbody,有Trigger。   Kinematic Rigidbody Trigger Collider:运动学刚体触发器。有Collider,有Rigidbody,刚体是Kinematic,有Trigger。
4、Joints 可以使用各种Joint组件将两个物体进行链接,比如一个物体围绕另一个静态物体旋转。还可以做类似弹簧,绳子的效果。特殊效果:当施加的力大于这个值的时,可以设置一个关节断开。关节之间可以产生驱动力,使其自动运动。
5、Character Controllers(角色控制器) 为第一人称或第三人称游戏中的角色做基于碰撞的物理特性。不能穿过静态碰撞物体;可以利用它设置物体的速度和方向等。
6、Physics Debug Visualization(可视化物理调试工具) 可视化物理调试允许您快速检查场景中的碰撞几何,并分析常见的物理场景。它提供了哪些GameObjects应该和不应该相互碰撞的可视化。当场景中有许多Colliders,或者Render和Collision Meshes不同步时,这是特别有用的。文档链接: https://docs.unity3d.com/cn/current/Manual/PhysicsDebugVisualization.html
最后,小编特别推荐一些其他大神分享的内容。 1、【U3D】Unity 官方教程 物理系统系列汇总贴 https://www.cgjoy.com/thread-78315-1-1.html 2、在Unity2019新出了Unity Physics Collider (新的物理系统) https://blog.youkuaiyun.com/u010019717/article/details/89602208
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值