栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【UE5 C++基础 02】网格体API基础

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【UE5 C++基础 02】网格体API基础

首先我们要写一个Actor,用它来管理一个静态网格资产
Actor的特征:能够被挂载组件(component)

  • 在UE中,组件不是类,一个Actor对应一个类
  • 坐标与旋转量是一个Scene Component组件,若不需要也可以不挂载
  • 希望被渲染,加个静态网格组件
  • 希望有骨骼动画,加个骨架网格物体组件
  • 希望可以移动,可以在类中实现,也可以加个Movement组件来处理移动
  • 总之,需要挂载组件的时候,才应该继承Actor类
载入一个静态网格资产

用于视觉呈现效果

static ConstructorHelpers::FObjectFinder
 CubeVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube"));
载入一个测试碰撞的球体组件
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components")
class USphereComponent* SphereComponent;
  • 这些声明中的各个类型前面都冠以 class 关键字。这样,这些声明除了是变量声明之外,还是各自类的前向声明,从而确保各自的类会在头文件中被识别。下一个步骤中,我们会在CPP文件中为它们添加 #include。

此处papalqi大神解释是 前向引用声明,和上面一行没什么关系
就是说在这一行里,先声明有这个类USphereComponent存在
然后声明了有这样一个变量,类型是这个类的指针

类的前向引用声明示例代码
#include  
using namespace std;
class A* wtf; //可以看到这里的wtf是类A的指针
A* wtf2; //可以看到这里的wtf2也是类A的指针
#include "A.h" 
inline int A::max()
{
	return a > b ? a : b;
}
int main()
{
	A a(3, 5);
	wtf = &a;
	cout << a.max() << endl;
	return 0;
}

其实就是把class A;和A* wtf;写到一起了

Actor的两个接口

游戏开始时或生成时调用

void AFloatingActor::BeginPlay()

逐帧调用

void AFloatingActor::Tick(float DeltaTime)
Actor继承关系

Actor

多人游戏中的Actor

Replicated 说明符在服务器上启用Actor的副本,以在变量值更改时,将该变量值复制到所有连接的客户端。ReplicatedUsing 也有同样的功能,但还能设置 RepNotify 函数,此函数将在客户端成功接收复制数据时触发。将基于此变量的更改,使用 OnRep_CurrentHealth 执行各个客户端的更新。

若已学到本节此处,那么以下应是对Actor施加伤害的流程:

  • 外部Actor或函数对角色调用 CauseDamage,而角色又调用其 TakeDamage 函数。

  • TakeDamage 调用 SetCurrentHealth 以在服务器上更改玩家的当前生命值。

  • SetCurrentHealth 在服务器上调用 OnHealthUpdate,导致执行功能,响应玩家生命值的更改。

  • CurrentHealth 复制到所有已连接的客户端的角色副本。

  • 各个客户端从服务器收到 CurrentHealth 的新值时,会调用 OnRep_CurrentHealth。

  • OnRep_CurrentHealth 调用 OnHealthUpdate,确保各个客户端以相同方式响应 CurrentHealth 的新值。

20220622 网格体资产引用

我创建了一个第三人称模板,
然后创建了一个自己的继承Charactor的C++类
我并没有在Character中给定骨骼网格体组件的资源路径。
但是项目中却实实在在的出现了一个骨骼网格体。

我尝试把自己写的Character直接拖入项目,发现并没有骨骼网格体出现。
我就思考有没有可能是出生点自己产生的
查看了出生点的参数之后,并没有骨骼网格体资源路径
那么就再思考是不是第三人称模板导致的
果然找到了

那么下一步就是思考,GameMode与骨骼网格体的联系,它们为什么会产生这样的关联。

GameMode是提供给世界设置的配置信息,里面有默认Pawn的选择,第三人称模板指定的默认Pawn就是这个。

查看引用树的小尝试


我复制一个Character,ThirdPersonMPCharacter会自动连接到新的Character模型
我把这个新的Character删掉,ThirdPersonMPCharacter又自动连接回去原来的BP_ThirdPersonCharacter

这个问题之后研究一下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号