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

这篇具有很好参考价值的文章主要介绍了【UE5 C++基础 02】网格体API基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

载入一个静态网格资产

用于视觉呈现效果

static ConstructorHelpers::FObjectFinder<UStaticMesh>
 CubeVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube"));

载入一个测试碰撞的球体组件

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components")
class USphereComponent* SphereComponent;
  • 这些声明中的各个类型前面都冠以 class 关键字。这样,这些声明除了是变量声明之外,还是各自类的前向声明,从而确保各自的类会在头文件中被识别。下一个步骤中,我们会在CPP文件中为它们添加 #include

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

类的前向引用声明示例代码

#include <iostream> 
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直接拖入项目,发现并没有骨骼网格体出现。
我就思考有没有可能是出生点自己产生的
查看了出生点的参数之后,并没有骨骼网格体资源路径
那么就再思考是不是第三人称模板导致的
果然找到了
【UE5 C++基础 02】网格体API基础
【UE5 C++基础 02】网格体API基础

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

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

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

查看引用树的小尝试

【UE5 C++基础 02】网格体API基础
我复制一个Character,ThirdPersonMPCharacter会自动连接到新的Character模型
我把这个新的Character删掉,ThirdPersonMPCharacter又自动连接回去原来的BP_ThirdPersonCharacter

这个问题之后研究一下

20220627 跟进上面的问题

AThirdPersonMPGameMode::AThirdPersonMPGameMode()
{
	// set default pawn class to our Blueprinted character
	static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPerson/Blueprints/ASADVAVA"));
	if (PlayerPawnBPClass.Class != NULL)
	{
		DefaultPawnClass = PlayerPawnBPClass.Class;
	}
}

我把GameMode中的路径 指向了一个新的Character,
再次运行,果然模型变成了这个新Character的模型,
把新Character的模型删掉,再运行,报错
说明不会自动重新连接回原来的BP_ThirdPersonCharacter了文章来源地址https://www.toymoban.com/news/detail-415780.html

到了这里,关于【UE5 C++基础 02】网格体API基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用UE5新功能 “打包型关卡Actor” 实现场景的性能优化

    内容分为: 简介 实操 优化结果展示 看不懂原理看看实操就大概就能明白 “打包型关卡蓝图”是UE5新功能 世界分区(World Partition) 的一部分 但 不依赖于项目是否启用了世界分区 官方文档有关世界分区中 关卡实例化 的内容 官方文档: 这个功能的原理是将场景中的 静态网

    2024年02月12日
    浏览(111)
  • 《通过UE4/UE5的ProceduralMesh组件创建网格》

    一.介绍         因项目需求我接触到了ProceduralMesh组件,项目需要做淹没分析推演,根据json数据来在UE中推演出漫长淹没过程。这意味着数据是庞大的那么该怎么生成这个巨大的网格面呢。一开始我对这个组件的领悟不是很深刻,一个面是由四个坐标点组成,在最初的测试过

    2024年02月15日
    浏览(44)
  • UE5 C++ 基础变量类型,关于框架的初级练习

    一.创建自己的MyGameModed。并在其中设置好GamePlay框架。 1.创建MyGameState,MyGameState,MyHUD,MyPawn,MyPawn,MyPlayerController,MyPlayerState。 2.并在MyGameMode的头文件里面,把GmaeMode里的框架需要的框架类都包含进去。 3.写一个构造函数 并在MyGameMode里的,本身就封装了DefaultPawn等值,如下写法

    2024年01月19日
    浏览(41)
  • UE5 PCG插件场景静态网格模块化、快速搭建场景

            PCG图表可以理解为静态网格体图表,里面可以自定义放不同有静态网格体、可以对密度、大小、面积等等在场景实际应中做相应的调整,可以根据地形高度随机生成静态网络体,可以模化作业。大大降低了场景制的时间成本。PCG插件目前需要UE5.2以上的版本才可以

    2024年01月18日
    浏览(56)
  • ue之C++ 创建Actor

    UE中创建Actor十分简单: 如下图: 点击New C++ Class就可以啦。但是点击之后会发生什么呢? 首先他会出现对话框,询问我们需要创建哪一种类型的Actor,在这里说明一下unreal中C++可以创建的东西大致分为两类,第一种是Class,另外一种就是Plugins,在这里我们新建的是class,类,

    2024年02月13日
    浏览(41)
  • UE4 C++:Actor与Component的创建、销毁

    目录 Actor的创建与销毁 创建 UClass* TSubclassOf SpawnActor() 销毁 直接销毁:Destroy() 设置生命周期 Component 的创建与销毁 创建 构造函数创建:CreateDefaultSubobject Runtime创建:NewObject、RegisterComponent() 加载资源 FObjectFinder构造函数加载资源 LoadObject加载资源 设置组件层级关系 销毁组件

    2023年04月11日
    浏览(50)
  • ue4基础入门(一)actor和component

    快速开始: https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/CPPProgrammingQuickStart/ 角色和组件: https://docs.unrealengine.com/4.27/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/CPPTutorials/Components/ 本文主要根据上面两个链接中的官方教程写一些代码注释和个人理解,感觉这两篇

    2024年02月09日
    浏览(50)
  • 观察UE4里“在外部存储Actor”功能的基础行为

    一般情况下,Actor保存于关卡文件中。 但是,如果将Actor的 packaging mode 设置为 External : 则此Actor就会存储在另一个文件而非关卡文件中。 本篇目标是: 观察此功能的基础行为 观察外部文件的路径名规则 对于一般的Actor(默认 packaging mode 为 Internal )。修改此Actor会标脏关卡

    2024年02月05日
    浏览(44)
  • 【虚幻引擎UE】UE5 三种模式调用API详解(案例基于免费Varest插件)

    想通过UE5 调用API实现GET和POST, 可以通过自己编写C++方法, 或基于相关HTTP请求插件, 如Varest、Http Request、Http Blueprint For Web等等插件进行实现。 本文仅简要介绍实现思路及基于Varest插件的实操案例。 1.如果是无后端直接写代码,可以通过Apifox工具(或其他mock工具)设计接口

    2024年02月07日
    浏览(54)
  • Ue5 C++ metahuman

    参考官网: 创建MetaHuman | Epic Developer Community (epicgames.com) 参考: Quixel Bridge中的MetaHuman | Epic Developer Community (epicgames.com) 参考:导出到虚幻引擎5 | Epic Developer Community (epicgames.com) 参考:在Sequencer中使用MetaHuman | Epic Developer Community (epicgames.com) 待补充

    2024年02月10日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包