1、UE4的调试输出

//*1 调试输出*//
/*case a、快速使用 不设置log类别 默认为LogTemp*/
UE_LOG(LogTemp,Log,TEXT("Your message"));
UE_Log(LogTemp,Warning,TEXT("You Number type of float value is %f"),YourFloatTypeValue);
UE_Log(LogTemp,Error,TEXT("Your Number type of FString value is %s"),YourFStringTypeValue);
//Log:输出日志字体颜色为灰色 Warning:输出字体颜色为黄色 Error:输出字体颜色为红色 /*case b、设置自定义Log类别*/
//在YourCode.h文件中声明自定义Log类别@parm YourLog
DECLARE_LOG_CATEGORY_EXTERN(YourLog, Log, All);
//在YourCode.cpp文件中定义
DEFINE_LOG_CATEGORY(YourLog);
UE_LOG(YourLog, Log, TEXT("This is a message to yourself during runtime!")); /*case c、触发严重中断 程序执行到此时会触发程序中断*/
UE_LOG(YourLog, Fatal, TEXT("This fringe case was reached! Debug this!"));
//log输出在output log面板中显示 /*case d、 向屏幕打印消息 显示在屏幕上*/
if(GEngine)
{
GEngine->AddOnScreenDebugMessage(-, .f, FColor::Red, TEXT("This is an on screen message!"));
GEngine->AddOnScreenDebugMessage(-, .f, FColor::Red, FString::Printf(TEXT("Some variable values: x: %f, y: %f"), x, y));
}
//我们可以在.cpp文件下进行如下宏定义以快速使用该方法
#define print(text) if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 1.5, FColor::White,text)

2、在场景中查找对象

#include "EngineUtils.h"
/*case a、Actor 迭代*/
for (TActorIterator<AStaticMeshActor> ActorItr(GetWorld()); ActorItr; ++ActorItr)
{
AStaticMeshActor *Mesh = *ActorItr;
}
/*case b、Object迭代*/
for (TObjectIterator<AActor> Itr; Itr; ++Itr)
{
AActor *Component = *Itr;
}
//Object 迭代可以迭代的内容包括Actor可迭代的内容

3、射线的使用

//GetHitResultAtScreenPosition函数为引擎框架下APlayerController的方法
//顾名思义是以屏幕为起点向鼠标所在坐标发出射线,进行碰撞检测
//可查看APlayerController下此函数的定义
FVector2D cursorPosition(,);
this->GetMousePosition(cursorPosition.X, cursorPosition.Y);
FHitResult hitInfo(ForceInit);
FCollisionQueryParams collisionParms(false);
this->GetHitResultAtScreenPosition(cursorPosition,ECC_PhysicsBody,collisionParms,hitInfo);
//在此处理hitInfo;
/*GetWorld()->LineTraceSingleByObjectType等一系列函数用于处理更多的射线类功能,但APlayerController下已经封装好很多常用的方法。*/

4、场景捕获组件的使用

将SceneCapture2D组件拖入场景

选中SceneCapture2D找到Texture Target属性 并为其赋值

/*此处实现将SceneCapture2D看到的视角复制到Texture中 */
/*方式一、 */
/*sceneCapture为SceneCapture2D组件的引用 */
/*renderTexture为上图所示textureTarget的引用*/
UTexture2D *Texture = UTexture2D::CreateTransient(TextureRenderTarget->SizeX,TextureRenderTarget->SizeY, PF_B8G8R8A8);
sceneCapture->GetCaptureComponent2D()->UpdateContent();
TArray<FColor> SurfData;
FRenderTarget *RenderTarget = renderTexture->GameThread_GetRenderTargetResource();
RenderTarget->ReadPixels(SurfData);
void* TextureData = Texture->PlatformData->Mips[].BulkData.Lock(LOCK_READ_WRITE);
const int32 TextureDataSize = SurfData.Num() * ;
FMemory::Memcpy(TextureData, SurfData.GetData(), TextureDataSize);
Texture->PlatformData->Mips[].BulkData.Unlock();
Texture->UpdateResource();
/*方式二、*/
/*使用ConstructTexture2D函数,该函数每次返回的是同一块内存地址*/
sceneCapture->GetCaptureComponent2D()->UpdateContent();
Texture = renderTexture->ConstructTexture2D(this,"AlphaTex",EObjectFlags::RF_NoFlags,CTF_DeferCompression);
Texture->CompressionSettings = TextureCompressionSettings::TC_VectorDisplacementmap;
Texture->UpdateResource();

5、XML文件的使用

initgameValue.xml文件内容如下 
需要在build.cs文件中添加模块”XmlParser”,在YourCode.h中包含XmlParser.h

<?xml version="1.0" encoding="UTF-8"?>
<Value>
<ChildrenSex>Girl</ChildrenSex>
<SceneIndex></SceneIndex>
</Value>

解析代码如下

#include "XmlParser.h"
/*写数据*/
FXmlFile InitVariable(L"X:\\initgameValue.xml");
FXmlNode* root = InitVariable.GetRootNode();
TArray<FXmlNode*> VarArray = root->GetChildrenNodes();
VarArray[]->SetContent("Your content");
VarArray[]->SetContent("Your content");
InitVariable.Save(L"X:\\initgameValue.xml");
InitVariable.Clear();
/*读数据*/
FXmlFile InitVariable(L"X:\\initgameValue.xml");
FXmlNode* root = InitVariable.GetRootNode();
TArray<FXmlNode*> VarArray = root->GetChildrenNodes();
FString tempContent=VarArray[]->GetContent();
//一般情况下 文件加载路径不应该是绝对路径 我们可以使用FPaths::GameUserDir()得到项目路径根路径,从而便可以使用相对路径来进行配置文件的加载

6、UE4字符类型到基本数据类型的转换

UnrealString.h下的内联函数如下

/** Covert a string buffer to intrinsic types */
inline void FromString(int8& OutValue, const TCHAR* Buffer) { OutValue = FCString::Atoi(Buffer); }
inline void FromString(int16& OutValue, const TCHAR* Buffer) { OutValue = FCString::Atoi(Buffer); }
inline void FromString(int32& OutValue, const TCHAR* Buffer) { OutValue = FCString::Atoi(Buffer); }
inline void FromString(int64& OutValue, const TCHAR* Buffer) { OutValue = FCString::Atoi64(Buffer); }
inline void FromString(uint8& OutValue, const TCHAR* Buffer) { OutValue = FCString::Atoi(Buffer); }
inline void FromString(uint16& OutValue, const TCHAR* Buffer) { OutValue = FCString::Atoi(Buffer); }
inline void FromString(uint32& OutValue, const TCHAR* Buffer) { OutValue = FCString::Atoi64(Buffer); } //64 because this unsigned and so Atoi might overflow
inline void FromString(uint64& OutValue, const TCHAR* Buffer) { OutValue = FCString::Strtoui64(Buffer, nullptr, ); }
inline void FromString(float& OutValue, const TCHAR* Buffer) { OutValue = FCString::Atof(Buffer); }
inline void FromString(double& OutValue, const TCHAR* Buffer) { OutValue = FCString::Atod(Buffer); }
inline void FromString(bool& OutValue, const TCHAR* Buffer) { OutValue = FCString::ToBool(Buffer); }

例:

#include "UnrealString.h"
using namespace LexicalConversion; FString temp = "3.1415926":
float outFloat; FromString(outFloat, *temp);

7、UMG拖拽图标的实现

a、重载On Mouse Button Down函数 
新建UserWidget组件,在Graph事件图表中重载该函数实现检测是否触发拖拽事件

b、重载OnDrag Detected函数 
重载OnDrag Detected函数,处理拖拽逻辑 
@parm payload是用于传递的参数 会在On Drop函数中用到 
@parm defaultdragvisual是用于拖拽时跟随的图标

c、重载On Drop函数 
此时Operation中的Payload参数便是CreateDragDropOperation中的传递过来的Payload参数

8、UE4官方文档&Answer Hub 
1、官方文档 :https://docs.unrealengine.com/latest/INT/ 
2、Answer Hub :https://answers.unrealengine.com/index.html

9、直接使用静态class生成Actor

// 直接使用静态class生成Actor
UClass* bbbWeaponClass = AMyWeapon::StaticClass();
if (bbbWeaponClass)
{
AMyWeapon* bbbWeapon = World->SpawnActor<AMyWeapon>(bbbWeaponClass, this->GetActorLocation()+FVector(,,), this->GetActorRotation(), SpawnInfo);
if (bbbWeapon)
{
bbbWeapon->SpawnEffect(this->GetActorLocation());
}
}

10.设置组件的Translation

// 设置组件的Translation
MeshComponent->RelativeLocation.Z = -;

11、播放动画

FName animName = "/Game/Animations/Run.Run";
UAnimationAsset* runAnim = Cast<UAnimationAsset>(StaticLoadObject(UAnimationAsset::StaticClass(), NULL, *animName.ToString()));
MyWeaponActor->MeshComponent->PlayAnimation(runAnim, true);

12、生成粒子

// 生成粒子,并绑到模型指定骨骼上。(需要#include "EngineKismetLibraryClasses.h")
FName EffectName = "/Game/Particles/P_Sparks.P_Sparks";
UParticleSystem* MyEffect = Cast<UParticleSystem>(StaticLoadObject(UParticleSystem::StaticClass(), NULL, *EffectName.ToString()));
UParticleSystemComponent* PSC = UGameplayStatics::SpawnEmitterAtLocation(this, MyEffect, this->GetActorLocation());
FName tmpBone = "pelvis";
PSC->AttachTo(this->MeshComponent, tmpBone);

13、屏幕上打印文字

// 屏幕上打印文字(只有一行,多了会覆盖):
GEngine->AddOnScreenDebugMessage(, .f, FColor::Yellow, FString("Hello World!!!") );

14、Spawn sound

// Spawn sound
UGameplayStatics::PlaySoundAtLocation( this, FractureEffect.Sound, Position );

15、Tick组的运行顺序:

//Tick组的运行顺序:
TG_PrePhysics
TG_StartPhysics
TG_DuringPhysics
TG_EndPhysics
TG_PostPhysics

16、// Actor出生流程

// Actor出生流程
SpawnActor-->PostSpawnInitialize-->
PostActorCreated
OnConstruction
PostActorConstruction--> if (bWorldBegunPlay)
{
PreInitializeComponents()
}
UpdateOverlaps();
if (bWorldBegunPlay)
{
InitializeComponents();
PostInitializeComponents();
if (GetWorld()->bMatchStarted && !deferBeginPlayAndUpdateOverlaps)
{
BeginPlay();
}
}

17、动画蓝图载入

//C++载入动画蓝图的方法
FName MM_0_Anim= "/Game/Character/MM_0/Anim/MM_AnimBP.MM_AnimBP";
//你动画蓝图的路径
UAnimBlueprint* AminClass;
AminClass = Cast<UAnimBlueprint>(StaticLoadObject(UAnimBlueprint::StaticClass(),NULL, *MM_0_Anim.ToString()));
Mesh3P->SetAnimInstanceClass(AminClass->GetAnimBlueprintGeneratedClass());

18、计时器

FTimerHandle B;
GetWorldTimerManager().SetTimer(B,this, &ADemoCharacter_Weapon::EndRoad, RoadTime, false);

Unreal Engine 4 笔记的更多相关文章

  1. Unreal Engine 4 笔记 2

    转自:http://blog.csdn.net/st_dark/article/details/48005947 2.Actor继承自aactor,可以看成是一个容器,用来装"组件" ...

  2. Unreal Engine 4 RenderTarget制作Live Camera效果

    Unreal Engine 4 RenderTarget制作Live Camera效果 先上效果: Live Camera我不知道怎么翻译.反正意思就是将一个摄影机的Image渲染到一个2D平面上. ...

  3. Unreal Engine 4 创建Destructible Mesh(可破坏网格)

    Unreal Engine 4的物理引擎用的是PhysX. 支持网格破坏.布料.物理粒子等,非常强大.曾经须要编码才干完毕的工作,在Unreal Engine 4 中仅仅须要拖拖拽拽就完毕了,非常方便 ...

  4. 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二

    AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound  ...

  5. 游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)

    在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,Audiokine ...

  6. 游戏音频技术备忘 (三) 集成Wwise到Unreal Engine

    当前受众较广的商业游戏引擎有 Unreal Engine.Unity.cocos2d-x等,在音频领域的第三方中间件则有Wwise.FMOD.Criware等,言多且烦,我们首先集成Wwise到 Un ...

  7. 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren

    前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...

  8. 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove

    本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...

  9. Unreal Engine 4 C++ UCLASS构造函数易出错分析

    Unreal Engine 4 C UCLASS构造函数易出错分析 GENERATED_BODY GENERATED_UCLASS_BODY 在Unreal Engine 4的任意类中通常会见到两个宏 ...

随机推荐

  1. UITableView简述

    原帖:http://blog.csdn.net/totogo2010/article/details/7642908 Table View简单描述: 在iPhone和其他iOS的很多程序中都会看到Ta ...

  2. PAT 5-9 输出华氏-摄氏温度转换表   (10分)

    输入2个正整数lower和upper(lower≤\le≤upper≤\le≤100),请输出一张取值范围为[lower,upper].且每次增加2华氏度的华氏-摄氏温度转换表. 温度转换的计算公式: ...

  3. postman--安装及Interceptor插件

        1. 官网安装(看网速-我下载的时候一直下载失败) 打开官网,https://www.getpostman.com 选择ios或者win 2. 非官网安装 https://pan.baidu. ...

  4. 【微信小程序推广营销】教你微信小程序SEO优化,让你的小程序快人一步抢占先机

    今年一月份上线的小程序,经过近一年的沉淀发酵,现在也进入了快速发展期. 在未来肯定会有越来越多的小程序诞生,小程序多了就需要搜索,那么如何让自己的小程序在众多的小程序中脱颖而出,这就需要小程序SEO优 ...

  5. PNotes – 目前最优秀的桌面便签软件 - imsoft.cnblogs

    Pnotes: 下载链接: http://pan.baidu.com/s/1o6FK4SM 密码: n7il 便携版,包含中文语音包,包含十几种合适的皮肤. 更多信息:小众软件 http://www. ...

  6. EXCEL教程,包你一学就会

    片名称:自动筛选 照片名称:在Excel中字符替换 照片名称:在Excel中直接编辑“宏” 照片名称:在Excel中为导入外部数据 照片名称:在Excel中行列快速转换 照片名称:在Excel中运行“ ...

  7. .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?

    .NET 中的 async / await 写异步代码用起来真的很爽,就像写同步一样.我们可以在各种各样的异步代码中看到 Task 返回值,这样大家便可以使用 await 等待这个方法.不过,有时需要 ...

  8. 大家一起做训练 第一场 G CD

    题目来源:UVA 624 题目的意思就是:我现在需要从 t 张CD中拿出一部分来,尽可能的凑出接近 N 这么久的音乐,但是不能超过 N. CD不超过20张,每张长度不超过 N ,不能重复选. 一个很简 ...

  9. LG2945 【[USACO09MAR]沙堡Sand Castle】

    经典的贪心模型,常规思路:将M和B排序即可 看到没有人用优先队列,于是我的showtime到了 说下思路: 读入时将数加入啊a,b堆中,不用处理(二叉堆本来就有有序的性质) 读完后逐个判断,照题目模拟 ...

  10. stenciljs 学习十一 pwa 支持

    stenciljs 对于pwa 的支持是自动注入的,我们只需要简单的配置,stenciljs使用workbox 配置 默认配置 { skipWaiting: true, clientsClaim: t ...