2021SC@SDUSC
之前的七次flaxEngine游戏引擎中的物理引擎分析涵盖了四种不同 的物理对象的分析,本次源码分析我们将针对flaxEngine游戏引擎中最后一个Actor 对象——PhysicsColliderActor进行源码分析。后面我们将针对物理引擎中的连接器和其他物理对象进行分析。
同上次一样本次PhysicsColliderActor (物理碰撞器)的相关源码内容较少,所以我将针对PhysicsColliderActor.h头文件和PhysicsColliderActor.c 文件进行分析。
一:PhysicsColliderActor.h头文件:
API_CLASS(Abstract) class FLAXENGINE_API PhysicsColliderActor : public Actor
{
DECLARE_SCENE_OBJECT_ABSTRACT(PhysicsColliderActor);
首先是class的定义:继承自Actor对象名字叫PhysicsColliderActor(物理对撞机)
API_EVENT() Delegate<const Collision&> CollisionEnter;
此函数为此碰撞器初始化碰撞开始时发生(它与某物碰撞)
API_EVENT() Delegate<const Collision&> CollisionExit;
此函数为此碰撞器注册碰撞结束时发生(它结束与某物的碰撞)
API_EVENT() Delegate<const Collision&> CollisionExit;
此函数为此碰撞器注册触发器接触开始时发生(另一个碰撞器输入它并触发事件)。
API_EVENT() Delegate<PhysicsColliderActor*> TriggerExit;
此函数为该碰撞器注册触发器接触端时发生(另一个碰撞器进入并触发事件)。
API_PROPERTY() virtual RigidBody* GetAttachedRigidBody() const = 0;
获取此对象的刚体属性。
API_FUNCTION() virtual void OnCollisionEnter(const Collision& c);
此函数表示一个碰撞体初始化
API_FUNCTION() virtual void OnCollisionExit(const Collision& c);
此函数表示一个碰撞体结束
API_FUNCTION() virtual void OnTriggerEnter(PhysicsColliderActor* c);
当为该碰撞器注册了一个触发触发启动时调用(另一个碰撞器进入并触发该事件)
API_FUNCTION() virtual void OnTriggerExit(PhysicsColliderActor* c);
当为该碰撞器注册触发器接触端时调用(另一个碰撞器进入并触发事件)。
上述就是PhysicsColliderActor(碰撞器)的头文件的全部内容,接下来我们分析PhysicsColliderActor.c文件。
二:PhysicsColliderActor.c
PhysicsColliderActor::PhysicsColliderActor(const SpawnParams& params)
: Actor(params)
{
}
构造函数,维护一个内存
void PhysicsColliderActor::OnCollisionEnter(const Collision& c)
{
CollisionEnter(c);
auto rigidBody = GetAttachedRigidBody();
if (rigidBody)
rigidBody->OnCollisionEnter(c);
}
此函数是一个碰撞器的初拾化,其中的CollisionEnter是刚体中一个函数可以查看我之前刚体的内容板块。
void PhysicsColliderActor::OnCollisionExit(const Collision& c)
{
CollisionExit(c);
auto rigidBody = GetAttachedRigidBody();
if (rigidBody)
rigidBody->OnCollisionExit(c);
}
此函数表示一个碰撞体结束,同上述创建一个碰撞器一样调用其刚体的函数。
void PhysicsColliderActor::OnTriggerEnter(PhysicsColliderActor* c)
{
TriggerEnter(c);
auto rigidBody = GetAttachedRigidBody();
if (rigidBody)
rigidBody->OnTriggerEnter(c);
}
当为该碰撞器创建了一个触发触发启动时调用(另一个碰撞器进入并触发该事件),获取碰撞器的附着刚体,调用其方法。
void PhysicsColliderActor::OnTriggerExit(PhysicsColliderActor* c)
{
TriggerExit(c);
auto rigidBody = GetAttachedRigidBody();
if (rigidBody)
rigidBody->OnTriggerExit(c);
}
当为该碰撞器创建触发器接触端时调用(另一个碰撞器进入并触发事件)。获取碰撞器的附着刚体,然后调用刚体的相关方法。
上述就是PhysicsColliderActor.h头文件和PhysicsColliderActor.c文件的全部内容,经过相关的源码分析我们了解到PhysicsColliderActor大部分都是依靠刚体来实现物理内容的定义或者物理属性的限制。所以可以看出来flaxEngine游戏引擎中的物理引擎大部分都是依靠刚体来实现的物理条件的限制,所以刚体在物理引擎中是十分重要的。他是物理 引擎的Actor的基本单位,所以如果要了解一个游戏引擎的物理,首先要好好查看其物理引擎的相关内容的定义。此对我们了解其他内容也是很大程度的上的帮助。
本次flax Engine游戏引擎的物理引擎分析完毕,而flaxEngine游戏引擎中的Actor对象内容我们就全部分析结束。所以我们下次将针对物理引擎中的连接器和其他物理对象进行分析。