热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

最简单的UE4C++教程——绘制UE4辅助调试的形状【六】

【原教程是基于UE4.18,我是基于UE4.25】英文原地址接上一节,在本教程中,我们将绘制DrawDebugHelpers.h提供的多

 【原教程是基于 UE 4.18,我是基于 UE 4.25】

英文原地址

接上一节,在本教程中,我们将绘制 DrawDebugHelpers.h 提供的多个调试形状。DrawDebugHelpers.h 包含的相关的所有内容都是由 UE4 提供的。

创建一个新的 C++  Actor 子类并将其命名为 MyDrawDebugHelpers 。在头文件中,我们将在 .h 中声明将在 .cpp 文件中使用的变量,它们也可以在编辑器中进行编辑。我们将创建一个FVectors,一个 FMatrix,一个 FBox,和一个 FTransform

该头文件代码如下:

#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyDrawDebugHelpers.generated.h"UCLASS()
class UNREALCPP_API AMyDrawDebugHelpers : public AActor
{GENERATED_BODY()public: // Sets default values for this actor's propertiesAMyDrawDebugHelpers();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public: // Called every framevirtual void Tick(float DeltaTime) override;// declare location variablesUPROPERTY(EditAnywhere, Category = "Locations")FVector LocationOne;UPROPERTY(EditAnywhere, Category = "Locations")FVector LocationTwo;UPROPERTY(EditAnywhere, Category = "Locations")FVector LocationThree;UPROPERTY(EditAnywhere, Category = "Locations")FVector LocationFour;UPROPERTY(EditAnywhere, Category = "Locations")FVector LocationFive;UPROPERTY(EditAnywhere, Category = "Locations")FMatrix CircleMatrix;UPROPERTY(EditAnywhere, Category = "Locations")FBox MyBox;UPROPERTY(EditAnywhere, Category = "Locations")FTransform MyTransform;};

同时别忘了还要 include 头文件 DrawDebugHelpers.h 

#include "MyDrawDebugHelpers.h"
// include draw debu helpers header file
#include "DrawDebugHelpers.h"

在.cpp文件中,我们将首先为变量指定默认值。下面是我们将为默认值添加的初始化代码。

// Sets default values
AMyDrawDebugHelpers::AMyDrawDebugHelpers()
{// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;// init variables with valuesLocationOne = FVector(0,0,600);LocationTwo = FVector(0,-600,600);LocationThree = FVector(0,600,600);LocationFour = FVector(-300,0,600);LocationFive = FVector(-400,-600,600);MyBox = FBox(FVector(0,0,0), FVector(200,200,200));
}

接下来,我们将在 BeginPlay() 函数中绘制许多不同的形状。

下面是我们将添加到 BeginPlay() 来绘制所有形状的函数。

// Called when the game starts or when spawned
void AMyDrawDebugHelpers::BeginPlay()
{Super::BeginPlay();DrawDebugPoint(GetWorld(), LocationOne, 200, FColor(52,220,239), true);DrawDebugSphere(GetWorld(), LocationTwo, 200, 26, FColor(181,0,0), true, -1, 0, 2);DrawDebugCircle(GetWorld(), CircleMatrix, 200, 50, FColor(0,104,167), true, -1, 0, 10);DrawDebugCircle(GetWorld(), LocationFour, 200, 50, FColor(0,0,0), true, -1, 0, 10);DrawDebugSolidBox(GetWorld(), MyBox, FColor(20, 100, 240), MyTransform, true);DrawDebugBox(GetWorld(), LocationFive, FVector(100,100,100), FColor::Purple, true, -1, 0, 10);DrawDebugLine(GetWorld(), LocationTwo, LocationThree, FColor::Emerald, true, -1, 0, 10);DrawDebugDirectionalArrow(GetWorld(), FVector(-300, 600, 600), FVector(-300, -600, 600), 120.f, FColor::Magenta, true, -1.f, 0, 5.f);DrawDebugCrosshairs(GetWorld(), FVector(0,0,1000), FRotator(0,0,0), 500.f, FColor::White, true, -1.f, 0);}

编译代码。将你的新 Actor 实例对象拖放到场景中,则形状将在游戏中绘制。同时还可以在 Actor 的详细信息面板中编辑那些变量。

下面是最终的 .cpp 代码。

#include "MyDrawDebugHelpers.h"
// include draw debu helpers header file
#include "DrawDebugHelpers.h"// Sets default values
AMyDrawDebugHelpers::AMyDrawDebugHelpers()
{// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;// init variables with valuesLocationOne = FVector(0,0,600);LocationTwo = FVector(0,-600,600);LocationThree = FVector(0,600,600);LocationFour = FVector(-300,0,600);LocationFive = FVector(-400,-600,600);MyBox = FBox(FVector(0,0,0), FVector(200,200,200));
}// Called when the game starts or when spawned
void AMyDrawDebugHelpers::BeginPlay()
{Super::BeginPlay();DrawDebugPoint(GetWorld(), LocationOne, 200, FColor(52,220,239), true);DrawDebugSphere(GetWorld(), LocationTwo, 200, 26, FColor(181,0,0), true, -1, 0, 2);DrawDebugCircle(GetWorld(), CircleMatrix, 200, 50, FColor(0,104,167), true, -1, 0, 10);DrawDebugCircle(GetWorld(), LocationFour, 200, 50, FColor(0,0,0), true, -1, 0, 10);DrawDebugSolidBox(GetWorld(), MyBox, FColor(20, 100, 240), MyTransform, true);DrawDebugBox(GetWorld(), LocationFive, FVector(100,100,100), FColor::Purple, true, -1, 0, 10);DrawDebugLine(GetWorld(), LocationTwo, LocationThree, FColor::Emerald, true, -1, 0, 10);DrawDebugDirectionalArrow(GetWorld(), FVector(-300, 600, 600), FVector(-300, -600, 600), 120.f, FColor::Magenta, true, -1.f, 0, 5.f);DrawDebugCrosshairs(GetWorld(), FVector(0,0,1000), FRotator(0,0,0), 500.f, FColor::White, true, -1.f, 0);}// Called every frame
void AMyDrawDebugHelpers::Tick(float DeltaTime)
{Super::Tick(DeltaTime);}

最终效果如下

 

 


推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
author-avatar
lluuaalulua619
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有