IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> (八)flax Engine游戏引擎物理引擎——物理碰撞器 -> 正文阅读

[游戏开发](八)flax Engine游戏引擎物理引擎——物理碰撞器

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对象内容我们就全部分析结束。所以我们下次将针对物理引擎中的连接器和其他物理对象进行分析。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:40:53  更:2021-11-22 12:42:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 22:38:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码