【UE4】蓝图转为C++官方教程部分笔记

这篇具有很好参考价值的文章主要介绍了【UE4】蓝图转为C++官方教程部分笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

动机

官方教学有将蓝图转为C++的教学视频,非常详细。
将蓝图转为C++ – Unreal Engine
为了方便查找知识点,特意在这里记了一部分笔记(图片都来自于本人的工程而非视频)

1. 蓝图和C++的变量对应

  • 想要实现C++和蓝图的转换,首先就得知道蓝图和C++的变量对应关系
  • 首先官方文档有的规定代码规范中,明确提出了类型前缀名:
    • 模板类的前缀为T。
      例:TArray
    • 继承自 UObject 的类前缀为U。
      例:UStaticMeshComponent*
    • 继承自 AActor 的类前缀为A。
      例:APlayerController
    • 继承自 SWidget 的类前缀为S。
    • 抽象界面类的前缀为I.
    • 列举的前缀为E。
    • 布尔变量必须以b为前缀(例如 bPendingDestruction 或 bHasFadedIn)。
    • 其他多数类均以F为前缀,而部分子系统则以其他字母为前缀。
蓝图 C++
String FString
Name FName
Vector FVector
Rotator FRotator
Transform FTransform
  • 这些就是常见的F类变量
蓝图 C++
Float float
Integer int32
Integer64 int64
Bool bool
  • 值得一提的是,C++类型中的double,unsigned int在蓝图中都是没有对应的。
蓝图 C++
Object UObject*
Actor AActor
ActorComponent UActorComponent*
  • 这种类型非常多,都是用指针的。只要清楚变量属于Actor还是组件,一般都能判断出来。

2. BlueprintPure

	UFUNCTION(BlueprintPure)
	FORCEINLINE float GetNowHealth() const{return NowHealth;}
  • 在变量声明的时候加上BluepPure的宏,就可以创建一个蓝图中没有执行引脚的节点。
  • 而这个FORCEINLINE是指内联函数。

【UE4】蓝图转为C++官方教程部分笔记

  • 这样就封装的很漂亮,变量也可以根据情况写在Private里面了。

3. 寻找蓝图节点对应C++ API的方法

  • 这里用上一个博客的例子

【UE4】蓝图转为C++官方教程部分笔记

  • 现在想办法获取向量长度这个API

【UE4】蓝图转为C++官方教程部分笔记

  • 首先可以猜想,在蓝图中他输入是一个向量,可以先看FVector里是否有对应的函数。这次很好运,真的有。
    【UE4】蓝图转为C++官方教程部分笔记

  • 但是也不是每次都可以猜出来的,那就看看蓝图这里是怎么定义的。

  • 这里说来自Kismet数学库,这个和K2都是面向蓝图节点的库,不宜直接照搬到C++

【UE4】蓝图转为C++官方教程部分笔记

  • 去源码里面搜索这个Kismet数学库。

【UE4】蓝图转为C++官方教程部分笔记

  • 然后打开对应节点一看确实是调用了FVector的函数。那就直接用上。

4. 用C++结构体取代蓝图结构体

  • 还是因为C++ 无法直接访问蓝图,所以一开始就应该做好创建C++ 结构体的准备。
    【UE4】蓝图转为C++官方教程部分笔记
  • 首先创建一个Object的子蓝图,等会就是把这个修改成Struct
UCLASS()
class DOUBLEG_API UBag : public UObject
{
	GENERATED_BODY()
};
  • 默认的代码长这样
USTRUCT(BlueprintType)
struct DOUBLEG_API FBag
{
	GENERATED_BODY()
};
  • 修改一下他:
    1.CLASS都修改成STRUCT
    2.继承去掉
    3.U类型改成F类型‘

  • 这时候编译一下,我和他一样,UE4崩溃了。。。。

  • 然后里面加入变量,操作就和普通蓝图一样了。

5. 蓝图本地事件和蓝图可实现事件

蓝图本地事件:在C++ 中声明,实现,并且可以在蓝图中调用和重载

	UFUNCTION(BlueprintNativeEvent,BlueprintCallable)
	void Dead();
  • 例子:一个死亡函数
  • 首先需要一个BlueprintNativeEvent的宏
void ABaseCharacter::Dead_Implementation()
{
	GetMesh()->SetSimulatePhysics(true);
	SetLifeSpan(1);
}
  • 现在在.cpp里去实现就不再是用Dead()这个名字了,而是要加上_Implementation这个后缀才行。

【UE4】蓝图转为C++官方教程部分笔记

  • 打开子蓝图,在重载函数中找到他。

【UE4】蓝图转为C++官方教程部分笔记

  • 我们需要调用父类里的函数,所以就选择调用父类函数。
  • 也就是说,直接覆盖也是可以的。

【UE4】蓝图转为C++官方教程部分笔记

  • 我们让单位死亡的时候不仅完成原本的操作,还进行一次输出。
void ABaseCharacter::UpdateHealth(const float HealthAdd)
{
	NowHealth += HealthAdd ;
	if(NowHealth > MaxHealth) NowHealth =  MaxHealth;
	if(NowHealth < 0)
	{
		NowHealth = 0 ;
		Dead() ;
	}
	UpdateHPBar();
}
  • 在C++ 中调用Dead函数(没有用蓝图调用)

【UE4】蓝图转为C++官方教程部分笔记

  • 成功!
  • 这也就意味着,如果声明了一个蓝图本地事件,并且在子蓝图添加实现的话,在C++中调用这个函数就可以使用蓝图中的节点,一些C++中比较麻烦的操作可以规避掉了。

蓝图可实现事件:在C++ 中声明,在蓝图中实现

	UFUNCTION(BlueprintImplementableEvent,BlueprintCallable)
    void UpdateHPBar();
  • 例子:更新血条的操作,因为C++中获取用户界面比较麻烦,所以选择蓝图可定义事件。
  • 宏是BlueprintImplementableEvent
  • 他不能在C++中实现,类似于我们学过的纯虚函数。

【UE4】蓝图转为C++官方教程部分笔记

  • 同样是选择一个重载函数。

【UE4】蓝图转为C++官方教程部分笔记

  • 这个函数就是更新HPBar这个血条控件,要知道这个控件实在蓝图里面才有定义的。
void ABaseCharacter::UpdateHealth(const float HealthAdd)
{
	NowHealth += HealthAdd ;
	if(NowHealth > MaxHealth) NowHealth =  MaxHealth;
	if(NowHealth < 0)
	{
		NowHealth = 0 ;
		Dead() ;
	}
	UpdateHPBar();
}
  • 调用函数还是刚才那个。

【UE4】蓝图转为C++官方教程部分笔记文章来源地址https://www.toymoban.com/news/detail-418086.html

  • 血条正确更新!说明确实调用了蓝图事件。

蓝图本地事件VS蓝图可实现事件

蓝图本地事件 蓝图可实现事件
BlueprintNativeEvent BlueprintImplementableEvent
不可在C++中实现,只在蓝图实现 可以在C++中实现,蓝图不一定要实现
专门用于被重载 可以被重载,可以先执行C++部分再执行蓝图部分
  • 这两个宏的存在也就能让我们打消顾虑,在C++中写出主要逻辑。而涉及到资产引用,蓝图组件的都可以使用这两个方法创建函数来解决。

例子:

  • 如果喜欢的话,可以看看我实操将官方模板蓝图改C++,希望对你有帮助。
    【UE4】将蓝图转为C++的方法实操示范

到了这里,关于【UE4】蓝图转为C++官方教程部分笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【虚幻引擎】UE4初学者系列教程(蓝图篇)-全中文新手入门教程(含蓝图节点详细介绍,即时更新~)

    蓝图篇 目录 蓝图基础逻辑 知识点1:蓝图是可视化编程 知识点2:蓝图是面向对象的编译型可视化编程语言 知识点3:关卡蓝图和蓝图类的区别 知识点4:蓝图数据类型 知识点5:节点的介绍 知识点6:引脚的介绍 知识点7:节点的执行顺序 知识点8:节点的类型 知识点9:节点

    2024年02月04日
    浏览(119)
  • 【虚幻4】UE4初学者系列教程(蓝图篇)-全中文新手入门教程(含蓝图节点详细介绍,即时更新~)

    蓝图篇 目录 蓝图基础逻辑 知识点1:蓝图是可视化编程 知识点2:蓝图是面向对象的编译型可视化编程语言 知识点3:关卡蓝图和蓝图类的区别 知识点4:蓝图数据类型 知识点5:节点的介绍 知识点6:引脚的介绍 知识点7:节点的执行顺序 知识点8:节点的类型 知识点9:节点

    2024年02月04日
    浏览(72)
  • 【UE5/UE4】【UE C++】制作一个蓝图宏库用以在构造器中Spawn Actor

    实际上该功能可以通过纯蓝图写出,以下展示蓝图中如何操作构造器 仅需在创建\\\"自定义事件\\\"的时候勾选\\\"编辑器中调用\\\"属性,然后就可以直接在蓝图中生成 但同时,我们发现\\\"从类生成Actor\\\"该蓝图节点具有生成局限性 无法在当前关卡外生成 以及无法生成某些在蓝图中公开却不在

    2024年02月14日
    浏览(62)
  • UE4 C++联网RPC教程笔记(二)(第5~7集)

    在前面的课程里,我们都是通过 Actor 的生成来看服务端与客户端是否同步。接下来我们研究下 Actor 的变量复制来实现变量同步。 下面文本截取自梁迪老师的 RPC 联网文档。 变量复制只有在服务端修改才会更新到服务端和所有客户端,在客户端修改只会更新所在客户端,对服

    2024年02月22日
    浏览(50)
  • UE4 C++联网RPC教程笔记(一)(第1~4集)

    本系列笔记将会对梁迪老师的《UE4C++联网RPC框架开发吃鸡》教程进行个人的知识点梳理与总结,此课程也像全反射零耦合框架的课程那样,已经超过报名截止时间了,无法通过正常方法观看。 笔者依旧是采取神奇的方法,通过手机浏览器(不同浏览器的效果有差别,有的会直

    2024年02月19日
    浏览(51)
  • UE4 C++联网RPC教程笔记(三)(第8~9集)完结

    前面我们通过蓝图节点实现了局域网连接的功能,实际上我们还可以给项目打包后生成的 .exe 文件创建一个快捷方式,然后修改这个快捷方式的属性中的目标就可以实现简易的联网功能。 下面内容截取自梁迪老师准备的 RPC 联网文档: 使用 .exe 后缀输入和 open IP 地址联网 注

    2024年02月22日
    浏览(50)
  • UE4运用C++和框架开发坦克大战教程笔记(十五)(第46~48集)

    逻辑和批量加载同类 UObject 资源的逻辑差不多。区别在 DealClassKindLoadStack() 内,如果已经有资源率先加载完成了,那后续资源加载的途中我们想让已经加载好的资源执行额外的处理逻辑(比如让它每帧生成),我们就需要补充额外的判断条件,即判断其是否第一次生成完毕。

    2024年01月25日
    浏览(51)
  • UE4运用C++和框架开发坦克大战教程笔记(十四)(第43~45集)

    继续来补充根据资源类型生成资源的逻辑,在 DDWealth 里添加获取 URL 的方法。 DDWealth.h DDWealth.cpp 建立 DDWealth – DDModule – DDOO – 对象 的调用链。 DDModule.h DDModule.cpp DDOO.h DDOO.cpp 如果编译通过则说明写好了,现在所有的对象都可以通过这两个方法获取目标资源的 URL。刚刚写的

    2024年02月03日
    浏览(45)
  • UE4运用C++和框架开发坦克大战教程笔记(十三)(第40~42集)

    上节课实现了按键绑定系统的 4 种基础绑定,这节课来实现多按键事件的绑定。 我们为多按键绑定额外编写一个类 InputBinder 。 DDMessage.h DDMessage.cpp 依旧是部署好 DDMessage – DDModule – DDOO – 对象 这条调用链。 DDModule.h DDModule.cpp DDOO.h 为了避免出现忘记注销事件指针导致访问错

    2024年02月03日
    浏览(45)
  • UE4运用C++和框架开发坦克大战教程笔记(十一)(第34~36集)

    我们前面已经在一个类里面实现了一套可行的协程系统,接下来我们需要通过宏来将它们变得更加方便可用,不必每次都写这么多代码。 将 CoroActor 头文件里的委托声明语句以及两个结构体全复制到 DDTypes 下,改成通用的结构。下面只列出需要更改的代码。 DDTypes.h 来到 Cor

    2024年02月03日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包