Unity5 VS UE4

Unity3D教程手册(墨客er) · 2015-08-12 20:58

UE4和Unity5都是非常受开发者欢迎的游戏引擎,那么到底它们之间有什么不同呢?如何做出选择呢?下面这篇文章是一名独立游戏开发者Maik Klein,根据自己的开发经验给出的总结意见。

调试


调试可以帮助你判断,在应用程序的运行过程中发生了什么。

在UE4中,只需要在Debug模式下按下F5即可(只需要按下F5就可以在编辑器中启用Debug模式)。你可以随时修改代码,但是在调试期间,不能在VS中进行编译。你可以在编辑器中设置断点,对代码进行编译。

调试功能甚至可以使用于网络游戏,这一点非常棒。想象如下场景,四个客户端一个服务器,并且你在一个所有客户端都会调用到的函数中打了断点,这个断点将会被触发4次,随时都可以查看任何你想要的值。

Unity的调试功能不如UE4方便。使用UnityVS插件,它可以将VisualStudio与编辑器或者编译好的可执行程序相结合。但是,调试的过程会缓慢一些,从点击Play按钮到实际进行运行模式大概需要10秒钟的时间。

每次只能调试一个实例,如果是网游,这是非常麻烦的问题,UnityVS不支持调试时编辑代码。

稳定性


我认为Unity和UE4都有一些不稳定。

仅两天的时间,我的Unity项目变的糟糕并且很难修正,花费了不少时间,我找到了原因,因为我写了一个自定义工具放在Standalone游戏的asset文件夹中,从而导致了一些非常奇怪的错误发生,有些时候,我正在编辑器中编写脚本,Unity居然崩溃了。

UE的编辑器经常会崩溃,有时会检测不到Blueprint的变化。对于C++也会存在相同的情况,但是至少可以直观的找到到底是哪里出了问题。比如,编辑器的的编译按钮消失不见。

操作不当的时候UE4也会经常崩溃。比如,忘了做空指针检查然后访问了空指针,所以需要经常进入调试模式,否则会得到很奇怪的提示。

但在Unity中代码还没有崩溃过,在Unity中你访问了空指针,它会记录下来。

项目升级


项目升级对于UE4来说是短板,每次Epic发布小版本升级,都会出现各种出乎意外的问题。

我的建议是等待并且使用与最新版本至少相差一个的版本。如:最新版本是4.9,你可以从4.7升级到4.8版本。因为至少这个时候,一些常见的问题会发现出来。建议不要升级到最新的版本,除非最新的版本有一些特有功能。

我并没有在Unity中升级过项目,但是我推测一些问题仅会发生在主要版本的升级上。

开源


开源对于我来说是非常重要的,遇见问题自己可以解决。并且对于了解API的工作原理也很有帮助,坦白说Visual Studio中的百万级的C++代码量实在是太大了。但是有的游戏框架的源码已经非常好了,我现在经常研究。

与UE4不同的是,Unity是闭源的。

举个例子:Unity最近发布了UNET,适用于Unity的多人解决方案。附带了类似于NetworkManagerHUD原形脚本一样的脚本,提供了一个简单的GUI。你可以启动服务器,或者作为客户端连接到服务器,但是如此简单的脚本实现都是不可见的。

编码


UE4使用自定义的C++方案,编写C++时主要使用很多宏指令,这些宏指令会生成的一些代码提供给UE4的Header Tool,它会生成一些代码。

UE4有些陷阱需要注意。例如,如下代码:

UFooComponent* FooComponent;

....

FooComponent = CreateDefaultSubComponent(TEXT(“Foo"));

这个指针将会被重置为null,需要像这样注释宏指针。

UPROPERTY()

UFooComponent* FooComponent;

Unity使用自定义的C#解决方案,我了解到他们正在使用IL充血UNET,并且我确信他们对MonoBehaviors做了同样的事情,因为我找不到Start的方法。

在Unity中可以写成这样:

[SyncVar]

float health;

它会将值从服务器同步到客户端。

在UE4中写法如下:

UPROPERTY(Replicated,Reliable)

float Health;

...

DOREPLIFETIME(AFooSomething, Health);

悲催的是,Unity仍停留在.Net3.5,不久以后可能会被IL2CPP所替代,但目前仍旧是使用.Net3.5。

Unity的游戏框架很底层,你有绝对的自由去做任何你想做的。

UE4强制你使用它的游戏框架,它可以适应很多游戏流派,但限制了架构上的自由。UE4游戏框架使用了大量继承,这很死板。

好处是你可以从头开始随意创建自己的素材。

在Unity中你必须使用GameObject,然后才可以为其加上MonoBehaviours。

UE4有类似的东西叫做Actors和ActorComponents,主要是可以使用Actor的子类。

比如,可以创建:

class AMonster: public AActor

然后在运行时,检查一些角色是不是怪物:

AMonster* Monster = Cast<AMonster>(SomeActor);

在Unity中你可能这样创建怪物组件:

public class Monster: MonoBehevaior

Monster monster = gameObject.GetComponent<Monster>();

还有一种选择,使用标签:

gameObject.tag = “Monster";

但是我非常不喜欢这样使用字符串。

示例


Unity和UE4都有很多学习资料,但是大多数都是关于如何使用引擎的。基本上没有高级的编码示例。

Epic Games举办的Unreal Tournament(Unreal开发大赛)是UE4的一大亮点,可以从中学习Epic内部是如何使用UE4的。

网络


UE4的网络工作流是非常棒的,只需要点击play,编辑器会自动生成多个游戏实例并连接它们。

Unity并没有用于多人游戏的工作流。于我而言,C#的主要优势是它的编译速度,但是在Unity中,如果你想要多个游戏实例的话,需要单独编译出一个游戏,编译创建那些二进制文件需要花一些时间。

这就是我自己写了一个超级编辑器脚本的原因,它能产生4个游戏实例,将他们绑定到我的第二个监听器,启动编辑器作为服务器,并连接4个客户端。

你可以在这里找到这个脚本:https://github.com/MaikKlein/UNetHelpers

总之,UE4的网络和Unity的UNet感觉很像,但是UNet带有附加功能。Unity有一个中转服务,NAT穿透,一个大厅系统,使用它创建主服务器很简单。Unity也可以收取少量费用,在AWS云上帮你托管游戏。这个服务对一小部分用户甚至是免费的,对于像我一样的独立开发者来说很诱人。

我可以托管我的demo游戏和朋友一起玩。在UE4中,没有NAT穿透,所以需要开放一些端口,但是至少在UE4中你可以创建专属服务器。

在Unity中可以在不同的频道发送消息。比如,你可以在频道0发送位置更新消息,重要一点的消息在频道1发送,也可以在特定频道设定消息协议。比如,你可以将频道0设置为不可靠的,将频道1设成可靠的。

相比之下UE4使用单独的属性来标志是否可靠,并为创建的所有角色创建一个频道,然后使用FObjectReplicator来复制属性。

你可以使用 GetNetPriority来控制角色的优先级。

定价


UE4没有任何附加条件,但是会从你的收益中获取分成。

Unity有两个不同的版本,个人版和专业版。个人版基本上没有附加条件,但是你一年的收益要低于10万美元,且不能自定义启动画面,也没有黑色的编辑器界面,专业版包含一系列服务。

我发现在Unity个人版中不能定制启动画面很烦人。我其实并不关心我的用户是否能看到Unity的启动画面,我关心的是使用Unity UNet开发我不得不创建一个单独的游戏,这意味着每次要测试一些东西都必须观看启动画面。

我觉得Unity应该允许在开发项目时禁用启动画面。

社区


Unity的论坛可能比UE4数量更多。Unity在Reddit的话题数量比UE4多2.7倍,当你遇见一些常见的问题的时候,从社区获得解答,是一个非常有利的事情。

原文作者:Maik Klein

本文由蛮牛社区(manew.com)墨客er翻译发布。

蛮牛社区(manew.com)分享最新的游戏研发和虚拟现实相关技术内容。

蛮牛译馆现公开招募"蛮牛译员",欢迎想要报名的网友在下方留言调戏小编呦~

Unity5 VS UE4相关推荐

  1. Unity5 GI与PBS渲染从用法到着色代码

    本文主要介绍Untiy5以后的GI,PBS,以及光源探头,反射探头的用法以及在着色器代码中如何发挥作用,GI是如何影响渲染的,主要分成三个部分,最开始说明PBS需要的材质与相应概念,二是Unity 里 ...

  2. 【Unity3D Shader编程】之九 深入理解Unity5中的Standard Shader (一)屏幕水幕特效的实现

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/49556461 作者:毛星云(浅 ...

  3. Unity5中的光照简介

    unity 5中的光照可以用整本书来说明,此文是过去几个月使用 unity5 的简单汇总.下面主要分6个部分来讲解. Forward(前向)与Deferred(延迟)渲染 Realtime(实时)与B ...

  4. ue4 4.24启动无响应_UE4项目问题集合

    debugeditor模式下,在LoadPackage过程中crash,vs报出Stack overflow的错误 这是由于Package层数过多,vs栈不够用导致的.而ue4用UBT导致不能直接修改 ...

  5. ue4 曲线图实现 蓝图_UE4蓝图解析(一)

    简介 蓝图是一类特殊的asset,可以使用直观.基于节点的方式创建逻辑,或者设置一些变量数据.策划可以创建自定义的Actor.Event.函数等等,快速的做Gameplay迭代,不需要写任何代码. 蓝 ...

  6. UE4材质着色器全面学习教程

    你会学到什么 通过所有着色器类型和设计的实际演示,学习创建材质 要求 对虚幻的基本理解会有所帮助 了解纹理的一般知识(不仅限于UE4)也很有用 描述 在这个系列中,我将带你设置大量不同的材料,教你如何 ...

  7. UE4制作程序背景游戏 Make a game with Procedural Backgrounds in UE4

    使用虚幻引擎4蓝图创建一个程序背景的游戏 你会学到什么 学习虚幻引擎4要领 使用程序切片创建标高 保存并加载某些游戏元素 创造一个无止境的跑步者角色 创建和完成游戏的良好习惯和实践 MP4 |视频:h ...

  8. UE4蓝图无代码编程游戏开发技能学习教程

    在虚幻引擎4中创建.设计和开发自己的游戏,无需编码 你会学到什么 虚幻引擎4中使用蓝图的游戏开发(无代码编程) 使用行业标准方法的游戏设计 使用Maya进行三维设计 在本课程中创建您的第一个游戏 Ga ...

  9. UE4风格化场景设计入门指南 Stylized Station – The Environment Artist’s Survival Kit

    持续时间13h 1920X1080 .ts 包含项目文件 大小解压后:4.9G 语言:英语+中文字幕(人工校对) 标题:风格化的车站--环境艺术家的生存工具包 信息: 环境艺术很难. 尤其是作为初学者 ...

最新文章

  1. tensorflow随笔-acosh,acos
  2. CIKM 2020 | 知识库问答复杂问题的分层查询图生成方法
  3. foreman源NO_PUBKEY 6F8600B9563278F6
  4. 重置oracle 11G的system、sys密码
  5. Android之Lollipop DevicePolicyManager学习(上)
  6. VS2017:无法安装Win10SDK_10.0.15063.UWP.Native、无法安装Microsoft.VisualC.Redist.12
  7. python通过opc读plc实例_python调用openopc读写plc
  8. 北京儿研所自制药一览表,宝妈们必读!转
  9. 【论文阅读】8-Non-local Scan Consolidation for 3D Urban Scenes
  10. 逆转三国攻略-各阶段关卡武将
  11. STM32 —— OLED 屏幕入门
  12. 向无所不能逼近的算法 逻辑与算法之一
  13. linux的systemctl命令介绍
  14. 开源IoT操作系统Mynewt使用简介
  15. eMMC SD/eMMC寄存器介绍
  16. python3常用标准库
  17. java final修饰符_浅谈JAVA中的final修饰符
  18. 用Python做PAT甲级1001-A+B Format
  19. 淘宝技术发展[转载]
  20. 两个组件绑定vuex中相同的状态值,但是一个组件改变的时候,另一个组件中的值同步改变了,但是页面没有更新

热门文章

  1. python怎么测试uwsgi并发量_nginx + uWSGI 为 django 提供高并发
  2. python的sleep_python的time.sleep()有多准确?
  3. iVMS-4200 Vs区别_杏林早报 | 西芹、水芹、旱芹...功效有区别,吃对才真降血压!...
  4. antlr 可以用java写吗_java – 我们可以用ANTLR定义一个非上下文语法吗?
  5. 火狐中怎么把xml转换为html,创建兼容IE、火狐、chrome、oprea浏览器的xmlDom对象方法...
  6. 高中信息技术考试软件_郑州市高中信息技术学业水平考试23日起网上报名
  7. docker 不包含依赖 打包_Docker打包深度学习项目(解决:Opencv依赖库、共享内存)...
  8. 一个简单的EJB-Session Bean实例
  9. Linux学习笔记:安装CentOS与Linux常用命令
  10. Spring Boot基础学习笔记04:Spring Boot加载自定义配置文件