UE4物理模块分析

本文主要探讨了UE4中StaticMesh和SkeletalMesh的物理实现,详细介绍了StaticMeshComponent和SkeletalMeshComponent的物理数据创建流程。通过分析代码,展示了如何在游戏运行时动态创建和管理物理数据,涉及到了NVIDIA的PhysX物理引擎。同时,文章讨论了如何在需要时创建物理数据以提高性能,并解释了物理碰撞检测和物理形状在PhysX引擎中的处理方式。
摘要由CSDN通过智能技术生成

一.Mesh组件与物理之间的关系

 

         关于UE物理的基本使用,官方文档以及我之前的文档已经做了较为详细的介绍。( 官方文档链接UE4蓝图碰撞检测解析UE4碰撞规则详解(2016.7.12更新)

         这里主要是从代码方面,简单分析一下UE4里面的物理是如何使用与生效的,StaticMesh以及SkeletalMesh对应的物理都是如何产生与作用的。第三部分会涉及到一些PhyX引擎的内容,简单谈谈UE与PhysX间的交互。

         首先,在游戏中常见的带有物理的物体一般有5种,胶囊体一类、静态网格物体StaticMesh、骨骼网格物体SkeletalMesh、Landscape地形以及PhysicsVolume(BrushComponent)。这5种类型本质上产生物理的规则都大同小异,为了方便我们只针对StaticMesh与SkeletalMesh来总结。

         对于直接放在场景的石块等,通常是通过3D建模软件导入到引擎中的资产。导入到引擎资源文件夹后就石块模型就以UStaticMesh类存在于引擎中,从资源文件夹拖到场景中后场景中的该对象就变成了StaticMeshActor。对于带动画表现的玩家模型,是通过3D建模软件导入的带骨骼信息的资产。导入到引擎资源文件夹后就以USkeletalMesh类存在于引擎中,从资源文件夹拖到场景中后场景中的该对象就变成了SkeletalMeshActor。当然,单独把没有任何处理的SkeletalMeshActor放在场景中看起来就如一个StaticMeshActor一样,没有任何动画,也可能没有任何物理。

         由于UE4提倡组件式的开发,Actor身上的很多特性都是通过组件提供的,所以物理数据都是挂在组件上的而不是Actor上。任何Actor上面都可以挂上N多个组件,因此一个玩家身上就可以有多个UStaticMeshCompnent与USkeletalMeshCompnent(一般还有一个胶囊体作为根组件)。举个简单的例子,玩家自身的模型是一个USkeletalMeshCompnent,然后身上的衣服装备就可以用一个UStaticMeshCompnent来表示。二者最大的差别就是SkeletalMesh可以产生动画。为了表现的更精确,他的每一个骨骼都可以产生对应的物理,而随着动画的变化他自身的每个骨骼物理也就需要跟随动画而改变,所以相比StaticMesh要复杂不少。

         对于一个静态网格物体StaticMesh,他的物理一般在建模软件里面就应该创建好,导入到编辑器时UE就会根据导入的数据创建物理信息,当然UE4本身也提供了物理碰撞的创建,如图1-1所示。不过无论哪种做法,本质上都是在编辑器里给UStaticMeshComponent构建一个UBodySetup,在开始游戏的时候在创建运行时的基本物理数据UBodyInstance。

图1-1 UE编辑器添加碰撞

 

(UBodySetup与UBodyInstance:我个人理解UBodySetup就是一个静态的物理数据,一般在在游戏运行前就已经构建好了[当然,你在游戏运行时创建也没什么问题]。你可以理解为一个类,编译以后就存在了。而UBodyInstance是一个在游戏时真正起作用的物理数据,可以理解为通过这个类创建的对象,运行时才真正出现。通过一个UBodySetup是可以创建出多个UBodyInstance的)

而对于骨骼网格物体SkeletalMesh,由于数据比较多,他的物理数据存储在PhysicsAsset里面。在游戏运行的时候,SkeletalMeshComponent会读取物理资产里面的数据UBodySetup随后再通过UBodySetup给角色创建对应的基本物理数据UBodyInstance。再进一步深入就是NVIDA的PhysX物理引擎了(当然你也可以采用BOX2D物理引擎),这篇文档后面会有简单的讲解。

(UE4里面除了SkeletalMeshComponent.cpp以外还有SkeletalMeshComponentPhysics.cpp,PhysAnim.cpp用来专门处理SkeletalMeshComponent物理相关的逻辑)

 

图1-2 物理资产

 

下面的图片描述了Mesh、 Component与物理基本类的基本关系

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值