admin管理员组文章数量:1342688
http://blog.sina/s/blog_7c5fd2e90101ku0j.html
使用Unreal4引擎前需要安装 或者编译引擎。 下面就为同学们介绍下 Unreal4 安装配置。
一. 在Win7下安装Unreal4
在Win7下安装Unreal4需要以下几个步骤:
1.
2. 安装 DXSDK_Jun10 如果出现下图所示错误Error
3. Win7下还需要安装 Windows 7 SP1(Service Pack 1) KB976932 补丁(windows6.1-KB976932-X64.exe)补丁可以从微软上下载(大概903MB) 附下载地址( http://windows.microsoft/zh-cn/windows7/learn-how-to-install-windows-7-service-pack-1-sp1 )
4. 安装完Windows 7 SP1(Service Pack 1) KB976932 补丁后就接下需要安装10以上版本的 InternetExplorer浏览器。大概就是ie11_windows6_1_x64_zh_cn.exe 的一个安装程序。 附下载地址 Internet Explorer 11( http://windows.microsoft/zh-cn/internet-explorer/ie-11-worldwide-languages)
5. 以上4步完成后就可以安装高端大气上档次的VisualStudio2013,也可以选择安装VisualStudio2012看个人喜好但是VisualStudio2013是Unreal4Engine引擎开发IDE所以UE4对VS2013支持的最好,还有很多插件呦。
6. 最后一步就是安装UE4了,直接安装UnrealEngineInstaller-1.0.0-2039063.msi文件。桌面或者安装路径的Unreal Engine\Launcher\Engine\Binaries\Win64\UnrealEngineLauncher.exe 可以直接运行啦。
7. UnrealEngineLauncher是一个引擎用户验证登陆器,使用了增量更新机制(哈哈 做游戏的更新机制已经给大家展现出来,具体能有多强大还需要好好研究一下 )。在( https://www.unrealengine/blog/welcome-to-unreal-engine-4)Unreal4官网注册一个账号就可以登录。 我在淘宝花了120大洋找人代付了1个月的会员,还购买了一个月的GreenVPN。准备好好研究下喽
二. 在Win8/Win8.1 下安装Unreal4
1. 依然首要问题安装 DXSDK_Jun10 时会出现 Error
2. 安装Visual Studio 2013或者Visual Studio 2012,个人建议选择VS2013许多新特性很适合Unreal4,而且UE4对Visual Studio 2013支持的比较好。
三. 其他方式安装Unreal4 Engine
算是小福利喽,不想付费又对UE4感兴趣的同学可以看下面方法,但是不确保链接总是会有效喔。 Unreal4源码包下载链接( http://pan.baidu/s/1qWCYkz) 引擎资源包(一)下载链接( http://pan.baidu/s/1eQzfwo) 引擎资源包(二)下载链接( http://pan.baidu/s/1dD5Tcn)
1. 下载好Unreal4源码后先将压缩包解压缩,得到UnrealEngine-4.0.1-release文件夹,然后需要把引擎资源包(一)和引擎资源包(二)下载后解压到UnrealEngine-4.0.1-release文件夹下覆盖相应目录文件。
2. 安装DXSDK_Jun10.exe, 如果 出现下图所示错误 Error
3. 安装完DXSDK后,双击UnrealEngine-4.0.1-release目录下的GenerateProjectFiles.bat文件,等待差不多1分钟后点击目录下的Ue4.SLN(VisualStudio2013的工程文件)
4. 然后就可以用VisualStudio2013打开工程文件可以进行编译了,编译时间会很长根据每位同学机器配置会有差异基本上15分钟就可以搞定,请同学们耐心等待。编译完成后就可以在 \UnrealEngine\Engine\Binaries\Win64目录找到UE4Editor.exe等运行文件啦。
小结:官方说现在还是未优化版本,稳定版请等待几个月会推出4.1版本(版本更新说明已经在我博客上贴出来 感兴趣的可以去看下 ),虚幻4运行配置较高,大家赶紧去体验吧。
这次主要是简单介绍下Unreal4引擎使用前的配置 和
1. 在Unreal4安装目录下找到路径为
可以很清晰的看到有 Android ,FX_tools , Maya_AnimationRiggingTools , MayaVelocityGridExporter
Android: 这个文件夹里主要是 安装AndroidSDK
FX_tools: 这个文件夹里主要是3DMax2012的插件。
Maya_AnimationRiggingTools和MayaVelocityGridExporter
UnrealVS: 这个文件中有VS2012和VS2013两个版本的UnrealVS.vsix插件,只需要双击就可以安装了。 附图:
VisualStudioDebugging: 文件夹下有一个UE4.natvis文件( .natvis 文件是带 .natvis 扩展名的 .xml 文件),同学们需要把这个文件拷贝到 安装 VisualStudio2013的按照目录下,路径为 Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers的文件夹中。 这样同学们就可以再 VisualStudio2013中的调试栏的监控里看到 Unreal4引擎自定义的特殊类型的值啦 。
2. 为什么建议各位同学使用 Visual Studio 2013呢,不仅仅是因为Unreal4引擎对VS2013支持的最好。在Unreal4中还有比较特殊的用途就是,当你想为你的项目添加C++代码的时候你需要点击File菜单中的Add Code to Project按钮。 下面附张图:
下面这张图 警告同学们啦,必须需要使用 Visual Studio 2013才能创建新的Class。
大概就介绍到这里啦。
言回正传:UnrealEngine4引擎提了我们有三种动态加载的方法,下面一一介绍。
一. 通过使用LevelStreamingVolume的方法:
二. 通过使用BluePrint的方法:
LoadStreamLevel节点
UnloadStreamLevel节点
三. 通过写代码的方式加载
PS:
C++和蓝图
概述
蓝图可以继承C++类,从而使得程序员可以在代码中创建新的游戏性类,而关卡设计人员可以使用蓝图来继承该类并对其进行修改。
类设置
在类设置的第一部分中,使用C++类向导创建一个名称为LightSwitchBoth
LightSwitchBoth类中的大部分代码设置都和仅使用C++的LightSwitch示例类似。尽管您可以让一个蓝图继承LightSwitchCodeOnly类,
但蓝图图表并不能访问该类中创建的组件、属性及函数。该示例将使用
您会发现首先参考下
这个头文件是从
PointLightComponent和SphereComponent是BlueprintReadOnly(仅蓝图可读的),并且将显示在
OnOverlap现在是一个BlueprintNativeEvent,将会显示在
DesiredBrightness是BlueprintReadWrite(蓝图可读写的),将显示在
DesiredBrightness现在是EditAnywhere(随处可编辑的),而不是VisibleAnywhere(随处可见的)。
UCLASS()
加上
LightSwitchBoth.h
//
#pragma
#include
UCLASS()
class
{
};
在LightSwitchBoth的源文件中,构造器仍然是一样的。但是,需要对
LightSwitchBoth.cpp
//
#include
#include
ALightSwitchBoth::ALightSwitchBoth(const
{
}
void
{
}
当创建类时,新的
当重新打开虚幻编辑器并重新打开您的项目后,便可以创建一个新的类蓝图了。
在
Blueprint
在
默认情况下,可能不会显示父类LightSwitchBoth的组件和属性。因为当选中
有两个图表用于设置
事件。如果没有该
在
LightSwitch_BPOnly
Sphere1->OnComponentBeginOverlap.AddDynamic(this,
OnOverlap
关于事件及处理图表的更多信息,请参照事件、
在变量的设置中,
其他Class
类蓝图
虚幻引擎4设置Visual Studio
设置Visual Studio和虚幻引擎4协同工作有利于提高开发人员使用UE4 的效率和整体用户体验。
On this page:- 推荐设置
- Intellisense(智能编码)、Live Errors(实时错误)和Squiggles(波浪线提示)
- 实现细节
- UnrealVS 插件
- 调试
- 针对Visual Studio 2012的可视化查看器设置
推荐设置
以下是为结合使用Visual Studio和虚幻引擎4的开发人员推荐的设置。
-
关闭
Show Inactive Blocks(显示不活动的代码块) 。如果您不关闭此项,在文本编辑器中,很多代码块会呈现出灰掉 状态。(Options(选项) > Text Editor(文本编辑器) > C/C++ > Formatting(格式)) 。 -
打开IntelliSense(智能编码)和"squiggles(波浪线提示)"功能,让它们正常运行。(请参照Intellisense(智能编码), Live Errors(实时错误)和Squiggles(波浪线提示)部分)
-
在Visual Assist X (VAX)中关闭
Format After Paste(粘帖后格式化) 功能。这个功能有时候会导致格式变得混乱。(VAX Options(VAX选项) > Advanced(高级) > Corrections(校正)) -
在解决方案浏览器中停用
External(外部) 文件夹, 它们会扰乱视图。( 在 Options(选项) > Text Editor(文本编辑器) > C/C++ > Advanced(高级) 中Disable External Dependencies Folder(禁用外部依赖文件夹) ) -
如果不需要
Edit & Continue(编辑&继续) 功能,请关闭它们。(Options(选项) > Debugging(调试) > Edit and Continue(编辑并继续)) -
关闭
Error List(错误列表) 窗口。如果启用该功能,当您的代码中出现合法错误时 Error List(错误列表) 窗口会自动弹出 。但是,当和虚幻引擎结合应用时, Error List(错误列表) 会显示不正确的错误信息。建议您最好 禁用该窗口,并使用 Output(输出) 窗口来查看您的代码错误。这个窗口将仅显示 真正的错误。要想禁用Error List(错误列表)窗口: -
如果
Error List(错误列表) 窗口处于打开状态,请关闭它。 -
从
Tools(工具) 菜单中, 打开 Options(选项) 对话框。 -
选择
Projects and Solutions(项目和解决方案) 并取消选中 Always show error list if build finishes with error(如果编译中出现错误总是显示错误列表) 选项。
-
Intellisense(智能编码)、Live Errors(实时错误)和Squiggles(波浪线提示)
虚幻引擎4项目现在可以正常支持 IntelliSense(智能编码)功能,包括实时Error List(错误列表) 和 "squiggles(波浪线提示)"! (请参照以下介绍获得如何启用它的信息。)
VC10的IntelliSense功能可以在您编写代码的过程中重新编译C++。这比仅检查 VAX的语法强大很多: VC10使用完整的C++编译器,可以验证每一行代码。这个功能非常强大并且将会 加快您的工作流程!
当其和波浪线提示功能结合使用时,如果您正在查看的文件有任何IntelliSense 错误,都可以在Error List(错误列表)中看到。 您可以通过Error List(错误列表)的右击菜单来打开或关闭该功能。
由于Squiggles(波浪线提示)功能不能和虚幻引擎4项目协同工作,您可能已经禁用了它们。请确保点击 C/C++ Advanced(高级)选卡,并使用以下设置。
当您打开一个C++文件时,您可以通过查找这个图标来判断IntelliSense编译器是否正在“工作”:
实现细节
-
当编写代码时显示波浪线提示有时候要花几秒钟的时间。
-
这是因为我们有很多包含文件,且IntelliSense目前不使用预编译头文件。
-
-
有时候您会看到“误报的”IntelliSense 错误。以下是几种可能的原因。
-
IntelliSense编译器(EDG)比MSVC编译器更严格。
-
某些针对IntelliSense的#defines设置和正常编译时的设置不同。
-
IntelliSense编译的C++总是被当做32位对待。
-
-
如果绝对需要,您可以把代码封装到
#ifdef __INTELLISENSE__
中,以消除波浪线提示。 -
IntelliSense的错误的表达方式和VC++ 编译器的错误的表达方式略有不同。他们只是表达不同而已。
-
头文件中的Squiggles(波浪线提示)功能通过编译包含它的已知
.cpp
对应的头文件来进行工作。 -
有时候IntelliSense把这个功能搞乱了,导致您会在头文件中看到波浪线提示。
-
-
如果需要,您可以增大
Max Cached Translation Units(最大缓存变换单元) 设置。 -
它会使用更多的内存,但可能会提高一点反应速度。
-
-
有少量C++文件还不能和IntelliSense相兼容。
-
Unreal Build Tool有一个新的
-IntelliSense
选项。 -
这将为我们的所有项目文件产生IntelliSense属性表。
-
当添加了新的模块或者项目包含发生改变时仅需要重新运行它即可。
-
UnrealVS 插件
Visual Studio的UnrealVS插件使您可以在使用虚幻引擎开发时轻松地访问常用操作。
功能包括:
-
设置启动项目
-
编译启动项目的可绑定命令
-
设置命令行参数
UnrealVS插件不能和Visual Studio 2012精简版协同工作。它仅能和Visual Studio 2012 专业版相兼容。
请参照UnrealVS插件页面 获得设置及使用该插件的信息。
调试
Visual Studio支持通过‘可视化查看器’来扩展调试器,从而轻松地查看常见的虚幻数据类型, 比如对象FNames 和动态数组。根据您所使用的Visual Studio 2010或Visual Studio 2012的不同, 这个功能的设置也有所区别。
针对Visual Studio 2012的可视化查看器设置
您会发现您的安装文件中包含了具备该可视化查看器逻辑的文件:
[ROCKETINSTALL]/Engine/Extras/VisualStudioDebugging/UE4.natvis
复制该文件到以下位置:
[VSINSTALLDIR]/Common7/Packages/Debugger/Visualizers/UE4.natvis [USERPROFILE]/My Documents/Visual Studio 2012/Visualizers/UE4.natvis
继续研究Blueprint,这次主要看看C++和Blueprint的结合方法。官方文档依然没有太大用处,但在wiki上还是有很多值得学习的文章的。当中有个叫Rama的家伙贡献了相当多的教程,他还写了一个很不错的插件,而且将源代码和实现的思路都写在了一个wiki页面里,对社区的帮助很大,MVP应该是没得跑了,要是多一些这样的人UE4就能更快地成熟并推广了。
不过在动手写代码之前,我首先把那个忍无可忍的VS2013自带的Intellisense给关掉了,我是完全按照官方文档的指引配置了所有的参数,但实际用起来却奇慢无比,再小的工程敲几行代码后要等二十几秒自动完成才能蹦出来,右下角那个处理提示符就几乎没消失过。而且代码帮助还非常不稳定,时有时无,另外还经常给出一些错误的提示。忍不了了,还是装了Visual Assist,瞬间一切都那么顺手又顺眼了。
工具搞定后,先来看看如何在C++中创建可以在Blueprint中使用的全局函数:
- 创建一个继承自UBlueprintFunctionLibrar
y的C++类即可。不知道为什么在Editor中不能直接创建基于UBlueprintFunctionLibrar y的C++类,但我们可以在VS中自己修改一下基类 - 继承自UBlueprintFunctionLibrar
y类中,凡是具备BlueprintCallable属性的UFUNTION即可在Blueprint中被调用 - 如果UFUNCTION还带有BlueprintPure属性,那么意味着这个函数不会修改任何游戏状态,因此无需exec链的触发(在Blueprint中体现为没有白线输入),可以在任何时刻被调用获取其结果
- 作为随时可被调用的全局函数,都需要被声明成static函数
下面是具体代码:
MyBPLibrary.h:
1 // Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. 2 3 #pragma once 4 5 #include "MyBPLibrary.generated.h" 6 7 10 UCLASS() 11 class UMyBPLibrary : public UBlueprintFunctionLibrary 12 { 13 GENERATED_UCLASS_BODY() 14 15 UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Test") 16 static FString GetHappyMessage(); 17 18 UFUNCTION(BlueprintCallable, Category = "Test") 19 static bool SaveToFile(FString Dir, FString Name, FString Text, bool Overwrite = false); 20 21 UFUNCTION(BlueprintCallable, Category = "Test") 22 static bool MakeDir(FString Dir); 23 };
MyBPLibrary.cpp:
1 // Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. 2 3 #include "HelloWorld.h" 4 #include "MyBPLibrary.h" 5 6 7 UMyBPLibrary::UMyBPLibrary(const class FPostConstructInitializeProperties& PCIP) 8 : Super(PCIP) 9 { 10 11 } 12 13 FString UMyBPLibrary::GetHappyMessage() { 14 return FString("Hello, I'm Happy!"); 15 } 16 17 bool UMyBPLibrary::MakeDir(FString Dir) { 18 return FPlatformFileManager::Get().GetPlatformFile().CreateDirectory(*Dir); 19 } 20 21 bool UMyBPLibrary::SaveToFile( 22 FString Dir, 23 FString Name, 24 FString Text, 25 bool Overwrite 26 ) { 27 IPlatformFile& F = FPlatformFileManager::Get().GetPlatformFile(); 28 if (!F.DirectoryExists(*Dir)) 29 { 30 F.CreateDirectoryTree(*Dir); 31 if (!F.DirectoryExists(*Dir)) 32 { 33 return false; 34 } 35 } 36 37 Dir += "\\"; 38 Dir += Name; 39 40 if (!Overwrite) 41 { 42 if (F.FileExists(*Dir)) 43 { 44 return false; 45 } 46 } 47 48 return FFileHelper::SaveStringToFile(Text, *Dir); 49 }
这个例子中实现了3个全局函数:GetHappyMessage,MakeDir以及SaveToFile,其中GetHappyMessage为无副作用的函数。它们在Blueprint中就可以这么用了:
在调试的过程中遇到的一些问题在这里说一下:
- 在Rama的例子中,对文件的操作都是基于GFileManager,但在实际写代码时发现这个全局变量不存在,只能通过FPlatformFileManager来实现相关操作,可能是Rama写教程之后UE4的代码又发生过变化
- 在Blueprint中,那些紫色的节点代表一个String类型的输入,但是这里需要注意:在输入框里不要将字符串包围在双引号之间了,也不要对特殊字符转义,系统会帮你处理。一开始不清楚在这里卡了好久
- 如果你自己的类是继承自PlayerController,那么可以使用ClientMessage来输出一些调试信息;但如果不是(比如上面的这个例子),则可以使用UE_LOG宏,宏的用法和Rama教程里的用法也不太一样了,需要自己去研究一下
通过在C++中实现供Blueprint调用的全局函数,就实现了Blueprint和C++交互的一种常用途径。后面再写一些其他交互方式的实现方法。
C++触发Blueprints事件
如果想实现只供某一个类使用的Blueprint函数,方式是类似的,只是不要再继承UBlueprintFunctionLibrar
虽然能够在Blueprint中调用一个C++实现的方法是很不错,但在实际中我们还会需要其他的交互方式,比如由C++代码去触发一系列的Blueprint动作,以及让Blueprint能够和C++类的某些属性变量直接进行交互。
我们先来看看如何将C++类中的某些属性变量暴露出去,让Blueprint(或Editor)能够看见、读或写这些变量,从而实现和C++的通信。
其实非常简单:只需要在C++类的头文件中这样声明一下就可以了:
1 2 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "PlayerMusicSkill") 3 int32 MusicSkillLevel;
只需要使用UPROPERTY宏,在加上一些枚举属性,就可以让一个变量以开发者希望的方式暴露给Blueprint,其中:
- EditAnywhere表示该变量可以在Editor中任意进行修改,而VisibleAnywhere则表示Editor中只能看、但无法修改这个变量,还有几个其他的可选项供选择,可以自行研究代码
- BlueprintReadWrite表示该变量可以在Blueprint中读或写,BlueprintReadOnly则表示在Blueprint中只能读
- Category表示在Editor和Blueprint列表中这个变量归到那一分类,这主要是一个方便开发者寻找的功能,没有其他特别作用
- 头部的注释不仅仅是代码中的注释,它也会作为这个参数的帮助提示显示在Editor的界面上
上面的代码在编译后,只需要在Editor中基于这个类创建一个Blueprint,然后就能够在它的Default属性界面看到下面的内容:
相当不错,而且简单。下面再来看看关键的:如何让C++去触发Blueprint,同时给Blueprint传递信息?
其实也非常简单,主要是使用UFUNTION+BlueprintImplementableEv
1 UFUNCTION(BlueprintImplementableEvent, meta = (FriendlyName = "Music skill is GOOD")) 2 virtual void MusicSkillGood(int32 CurrentSkill);
其中:
- BlueprintImplementableEv
ent表示下面定义的函数会触发Blueprint里的一个事件,但事件触发后如何处理则由Blueprint自行实现,C++代码不负责,它只负责在适当的时候调用下面的函数并传递参数数据而已 - meta相关内容和Category类似,主要是给用户提供一个更容易分辨的信息。在这里这个自定义事件在Blueprint中就会被显示为“Music skill is GOOD”,没有其他作用
- MusicSkillGood就是用来在C++中触发Blueprint事件的函数,它一定要被定义为虚函数,而且返回值一定要为void,因为这个函数的实现不由C++来做,它只是提供一个触发的手段,且所有的数据都通过其参数传递给Blueprint
完整的类代码如下:
MyPlayerController.h:
1 // Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. 2 3 #pragma once 4 5 #include "GameFramework/PlayerController.h" 6 #include "MyPlayerController.generated.h" 7 8 11 UCLASS() 12 class AMyPlayerController : public APlayerController 13 { 14 GENERATED_UCLASS_BODY() 15 16 17 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "PlayerMusicSkill") 18 int32 MusicSkillLevel; 19 20 UFUNCTION(BlueprintImplementableEvent, meta = (FriendlyName = "Music skill is GOOD")) 21 virtual void MusicSkillGood(int32 CurrentSkill); 22 23 virtual void PlayerTick(float DeltaTime) OVERRIDE; 24 };
MyPlayerController.cpp:
1 // Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. 2 3 #include "HelloWorld.h" 4 #include "MyPlayerController.h" 5 6 7 AMyPlayerController::AMyPlayerController(const class FPostConstructInitializeProperties& PCIP) 8 : Super(PCIP) 9 { 10 11 } 12 13 void AMyPlayerController::PlayerTick(float DeltaTime) { 14 Super::PlayerTick(DeltaTime); 15 16 if (MusicSkillLevel > 50) 17 { 18 MusicSkillGood(MusicSkillLevel); 19 } 20 }
上面代码的主要逻辑就是在每个Tick检查当前类实例的MusicSkillLevel变量值是否大于50,如果是,则对Blueprint触发MusicSkillGood事件,并将MusicSkillLevel的值传递过去。最终在Blueprint中可以这样用:
这个Blueprint的逻辑就是:
- 每当用户按M键,就将MusicSkillLevel变量的值加1
- 而如前所述,C++代码会在每个Tick检查MusicSkillLevel的值是否大于50,如果大于50了,那么就会在每个Tick都触发一次MusicSkillGood事件(由于meta的设置,这个事件被显示成“Music Skill is GOOD”)
- 当用户按了足够多的M键导致MusicSkillLevel变量的值超过50时,在游戏中就能看到MusicSkillLevel的当前值在刷屏了
到此为止,Blueprint已经和C++代码实现了完全的交互:Blueprint能够主动调用C++中的函数,C++也能主动触发Blueprint的事件,而且双方还能通过暴露的变量进行交互。这样一来,整个游戏的底层平台模块完全可以用C++实现,然后给上层的Blueprint提供调用接口,由Blueprint来利用、组织这些模块来实现上层的完整游戏逻辑。这种结合方式既保留了C++的性能优势,又充分利用了Blueprint的易用性和灵活性来让游戏开发保持快速地迭代。这应该就是UE4所推崇的最佳开发模式。
一. 最好不要自己在UnrealEngine4的工程中添加代码文件,尤其是.h文件。因为UE4的UnrealHeaderTool会根据UnrealEngine4的反射机制自动生成一个.generated.h文件(应该是UnrealBuildTool需要注册并做反射用)。添加代码最好是通过编辑器的创建类向导创建。
点击"显示所有类"后,如图:
二. UnrealEngine4的C++代码有套自己的浅规则,如同Unity3D的限制版C#一样。请各位同学们不要忙着抱怨 ,经过了13多年承载和UnrealScript的经验想必Epic不会自找苦吃把自己开发饭碗搞的很糟糕。目前笔者看到的优点是拥有GC机制,支持Blueprint和编辑器的反射机制,UnrealBuildTool的运行时编译,还有一些自动化生成功能。闲话不多说,来点干货先。
4. 下周UnrealEngine4就要更新4.1版本了,最近UE4还属于公测版有不少不稳定的地方,当然官方的更新的速度也很快。在目前这个情况下笔者比较建议采用Unity3D脚本开发的程序结构。做一个自己的逻辑模块聚合到自己的GameMode或者WordSettings下。再由自己的逻辑模块去驱动游戏逻辑调用或者驱动UnrealEngine4的其他模块,开发者把大部分精力放在逻辑模块的架构上和引擎功能模块的调度上,不要上来就想去从GamePlay的入口去改引擎底层的逻辑架构。
原因如下: 1). UnrealEngine4引擎目前还不是很健壮,可能会在开发流程和开发模式上做出变动。 2). UnrealEngine4试图把很多精力放在把大家想Blueprints上去引导,大力推动开发者用 Blueprints完成游戏开发。游戏逻辑和Blueprints关联很紧密,如果处理不好久有点得不偿失了会浪费大量时间和精力。
预祝大家开发顺利,欢迎随时沟通 互相学习和进步
本文标签: 入门
版权声明:本文标题:Unreal4 入门 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1740402194a2271720.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论