当前位置:   article > 正文

Unreal开发基础_蓝图无法加载,因为它派生自一个无效类。检查以确保这个蓝图的父类没有被移除!是否

蓝图无法加载,因为它派生自一个无效类。检查以确保这个蓝图的父类没有被移除!是否

类命名(基础类actor、Uobject)

  • 派生自 Actor 的类带有 A 前缀,如AController。
  • 派生自 Object 的类带有 U 前缀,如UComponent。
  • Enums 的前缀是 E,如EFortificationType。
  • Interface 的前缀通常是 I,如IAbilitySystemInterface。
  • Template 的前缀是 T,如TArray。
  • 派生自 SWidget 的类(Slate UI)带有前缀 S,如SButton。
  • 其他类的前缀为字母F ,如FVector。

节点树

GetWorld()->SpawnActor()    //创建
GetWorld()->GetActorList()   //查询
  • 1
  • 2

c++和蓝图交互

unreal中支持反射的宏定义,蓝图调用反射是基础设置

  • UCLASS类、USTRUCT结构体
  • UFUNCTION(BlueprintCallable,Categry)
    函数在蓝图中可以调用,事件的方式显示,蓝图如果没实现,调用c++的functionname+__implement实现
  • UPROPERTY(EditAnywhere, BlueprintReadWrite, Category)
    蓝图中可访问成员,当成员是回调函数时,需要绑定后调用
  • c++调用蓝图函数
    通过CallFunctionByNameWithArguments调用函数
    通过GetPropertyValue_InContainer访问属性
  • DEFINE_FUNCTION,蓝图生成的c++代码
 DEFINE_FUNCTION(UMyObject::execIsBoy)
    {
        P_FINISH;
        P_NATIVE_BEGIN;
        *(bool*)Z_Param__Result=P_THIS->IsBoy();
        P_NATIVE_END;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

构建状态

  • 调试(Debug)
    该配置包含用于调试的符号。该配置在调试配置中同时构建引擎和游戏代码。如果通过 调试(Debug) 配置编译项目并打算用虚幻编辑器打开项目,则必须使用“-debug”标志查看项目中反映出来的代码变化。
  • 调试游戏(DebugGame)
    该配置按最优方式构建引擎,但游戏代码为可调试状态。此配置适用于调试游戏模块。
  • 开发(Development)
    该配置等同于发布。虚幻编辑器默认采用 开发(Development) 配置。如采用 开发(Development) 配置编译项目,可在编辑器中看到项目代码的变化情况。
  • 交付(Shipping)
    这是最佳性能配置,用于交付游戏。此配置剥离了控制台命令、统计数据和性能分析工具。
  • 测试(Test)
    该配置就是启用了一些控制台命令、统计数据和性能分析工具后的 交付(Shipping) 配置。

构建目标

  • [空(empty)]
    该配置构建项目的独立可执行版本,但需要特定于平台的已烘焙内容。请参阅我们的打包项目 参考页面,以进一步了解烘焙内容。
  • 编辑器(Editor)
    为了能够在虚幻编辑器中打开项目并看到反映出来的所有代码更改,项目必须以 编辑器(Editor) 配置构建。
  • 客户端(Client)
    如果您使用UE4联网功能处理多人项目,该目标将指定项目用作面向多玩家游戏的UE4客户端-服务器模型中的客户端。如果存在Client.Target.cs文件,则 客户端(Client) 构建配置将有效。
  • 服务器(Server)
    如果您使用UE4联网功能处理多人项目,该目标将指定项目用作面向多玩家游戏的UE4客户端-服务器模型中的服务器。如果存在Server.Target.cs文件,则 服务器(Server) 构建配置将有效。

编译(*.Target.cs)

代码编译在两个阶段中进行

  • UnrealHeaderTool(UHT) 被调用。它将解析 C++ 头中引擎相关类元数据,并生成自定义代码,以实现诸多 UObject 相关的功能。
  • UnrealBuildTool(UBT)被调用,以便对结果进行编译。

UnrealBuildTool(UBT)编译*.Target.cs配置

public 构造函数(TargetInfo Target)
{
	Type = TargetType.Game;
}
  • 1
  • 2
  • 3
  • 4

UnrealBuildTool源码中定义的编译目标

public enum TargetType
{
	/// <summary>
	/// Cooked monolithic game executable (GameName.exe).  Also used for a game-agnostic engine executable (UE4Game.exe or RocketGame.exe)
	/// </summary>
	Game,
	/// <summary>
	/// Uncooked modular editor executable and DLLs (UE4Editor.exe, UE4Editor*.dll, GameName*.dll)
	/// </summary>
	Editor,
	/// <summary>
	/// Cooked monolithic game client executable (GameNameClient.exe, but no server code)
	/// </summary>
	Client,
	/// <summary>
	/// Cooked monolithic game server executable (GameNameServer.exe, but no client code)
	/// </summary>
	Server,
	/// <summary>
	/// Program (standalone program, e.g. ShaderCompileWorker.exe, can be modular or monolithic depending on the program)
	/// </summary>
	Program,
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

unreal按照场景节点添加的顺序,反向一次调用初始化

// Called when the game starts or when spawned
void AMyCharacter::BeginPlay()
{
	Super::BeginPlay();
	
}

// Called every frame
void AMyCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

代理

c++和蓝图交互的,回调函数

  • Bind()
    绑定到一个现有的代理对象上。

  • BindRaw()
    绑定到一个原始的C++指针全局函数代理上。原始指针不使用任何引用,所以如果从代理的底层删除了该对象,那么调用它可能是不安全的。因此,当调用Execute()时一定要小心!

  • BindSP()
    绑定一个基于共享指针的成员函数代理。共享指针代理保持到您的对象的弱引用。您可以使用 ExecuteIfBound() 来调用它们。

  • BindUObject()
    绑定一个基于UObject的成员函数代理。UObject 代理保持到您的对象的弱引用。您可以使用 ExecuteIfBound() 来调用它们。

  • UnBind()
    解除绑定该代理。

  • Execute()

  • ExecuteIfBound()对于没有返回值的代理

  • IsBound()判断函数是否已经“绑定”了代理

class FLogWriter
{
    void WriteToLog( FString );
};
DECLARE_DELEGATE_OneParam( FStringDelegate, FString );//代理
  • 1
  • 2
  • 3
  • 4
  • 5

代理对象绑定

FSharedRef< FLogWriter > LogWriter( new FLogWriter() );
WriteToLogDelegate.BindSP( LogWriter, &FLogWriter::WriteToLog );
WriteToLogDelegate.Execute( TEXT( "Delegates are spiffy!" ) );
  • 1
  • 2
  • 3

蓝图

蓝图可以做为脚本绑定到对象实例上,BP_Object
蓝图实例是类对象的思想,图形化编程的方式可以调用对象、函数数据,蓝图有成员变量和函数,还有构造
基本函数print打印字符串、set变量、get变量
目标节点输入,可以理解成输入对象,调用对象函数
执行节点输入,可以理解成下一个执行的运算

蓝图调试,运行后检查,场景中的输入,蓝图调试依赖场景输入(设计器中没法输入)

  • gamemode,level关卡中设置全局操作
  • gamestate,存储基本数据
  • gamehud,不可交互的ui和umg可交互的不同

蓝图查看类,右上角父类
在这里插入图片描述

关卡默认的蓝图,通过菜单栏打开
在这里插入图片描述

着色器(*.usf文件)

PIE模式

  • play in editor
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/775424
推荐阅读
  

闽ICP备14008679号