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. REST easy with kbmMW #4 – Access management

    在前面有关如何使用kbmMW创建REST服务器的基础上,现在已经到了考虑该如何控制用户的访问.什么是访问管理?就是“允许谁做什么"的问题. 显然,这个世界中存在数据,应该保护他而不被未授权的 ...

  2. 使用Arduino模块实施无线信号的重放攻击

    无线电已经存在使用了很长一段时间,在这很长的一段时间里诞生了一个名叫火腿族的集体(小编:嗯 对 就是整天吃火腿的那些人^_^  CQ CQ ).无线电和互联网一样:同样存在一些安全隐患,比如:在无线信 ...

  3. pycharm 提示性信息

    语法错误:文字底部红色波浪线 解决方案:语法修改正确 语法不符合规范:文字底部灰色波浪线 解决方案:快捷键(Alt + Enter + Enter ) 单词拼写提示:文字底部绿色波浪线 解决方案: 单 ...

  4. C高级第三次作业(1)

    6-1 输出月份英文名 1.设计思路: 1.定义一个字符串数组将12个月的英文加进去: 2.判断输入的数是否大于等于1小于等于12: 3.若是 则返还s[n-1]; 4.否则返还NULL: 源代码: ...

  5. can-utils源码解析cansend

    前言 本文主要介绍socketCan中的发送函数cansend的源码解析. 代码 /* * cansend.c - simple command line tool to send CAN-frame ...

  6. 浅谈 React

    机缘巧合认识React,翻了2天的资料,又整理了1天,也算是简单入门了;之前也学过angular,相比来说,的确React代码逻辑更加简单明了,理解起来也相对容易. React 具备以下特性:1.声明 ...

  7. IDEA中遇到One of the two will be used. Which one is undefined.

    某次启动idea的时候看到控制台提示如下错误 : objc[]: Class JavaLaunchHelper is implemented .0_131.jdk/Contents/Home/bin/ ...

  8. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步

    本文记录了在Windows环境下安装Visual Studio Code开发工具..Net Core 1.0 SDK和开发一个简单的Web-Demo网站的全过程. 一.安装Visual Studio ...

  9. LeetCode Majority Element Python

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  10. AllJoyn 了解

    AllJoyn是一个中性平台系统,旨在简化邻近异构分布式移动通信网络系统.这里的异构性不仅表示不同的设备,而且可以是具有不同操作系统和不同类型的设备(例如个人电脑.手机.平板电脑和消费性电子产品),并 ...