2015-10-08 11:50:07 Neil3D 阅读数 8420

Unity3D引擎定位在“游戏开发大众化”,在近年的手机游戏开发热潮中着实火了一把,拥有广大的用户基础。EPIC官方还专门写了一篇文档:

                          Unreal Engine 4 For Unity Developers:https://docs.unrealengine.com/latest/INT/GettingStarted/FromUnity/index.html

下面本人就自己个人的一些学习这两款引擎的一些体会,做一些经验总结。


如果你已经熟悉了Unity引擎,现在想要掌握UE4,可以从两个不同的角度来看待你在Unity开发上积累的知识:

  1. 作为两个国际水平的现代3D游戏引擎,他们两个的设计思路有一定的相似之处。这种相似,只是大方向上的,具体的细节,甚至是设计的出发点都有很多差异。
  2. 两套引擎背后的设计哲学是不同的,应用思路其实差别也很大。你可以通过本文描述的两个引擎的相通的地方,对UE4有一个快速的认识。然后,还是需要把瓶子里的水倒空,当作是一个全新的学习历程来看待UE4。


编辑器对照

Unreal Editor和Unity乍看上去区别很大,仔细看一下,发现他们还是有一些相似之处的,从官方文档中的图可以作为一个很好的比照。


  • “Viewport视图”,相当于Unity的Scene视图,显示当前所编辑的关卡的3D渲染场景。在Unreal Editor中没有Game视图,但是它也支持PIE(Play In Editor)。当你点击工具栏中的“►播放”按钮时,Viewport就会显示当前的游戏运行状态了,变成Unity的Game视图了。
  • “内容浏览器”(Content Browser),与Unity的Project视图基本相当,内容浏览器管理你项目中的所有资源(asset)和游戏逻辑代码(包括Blueprint和C++)。
    在Unity的Project视图,你可以选中一个资源,通过Inspector视图来调节其属性,而有些资源可以通过特定的编辑器来编辑,例如Animation。而在UE4,所有的资源都有自己的编辑器,你可以双击任何一个资源,打开特定的独立编辑器,包括静态模型编辑器,Persona骨骼动画编辑器,UMG UI编辑器(Unreal Motion Graphics UI Designer),Cascade粒子编辑器等等。
  • “世界大纲视图”(World Outliner),相当于Unity中的Hierarchy视图。它们都是显示当前关卡中的所有对象,并可以在此列表中选中、编辑;同样支持PIE模式中(即在游戏运行状态下),动态生成的对象也会显示在这里,非常直观。
    就像它的名字一样,Unity的Hierarchy视图,可以呈现、组织GameObject的层次结构;在Unity中我们经常使用空的GameObject来当作文件夹使用,在UE4,你可以通过创建文件夹来组织关卡编辑的层次结构。两个引擎的组件模型、对象组织方式有一些差异,后面还会单独说一下。
  • “细节”视图(Details),它起到一部分Unity的Inspector视图的作用。为什么说是一部分呢?在Unity中,Inspector视图可以显示关卡中的对象(Hierarchy视图中的)的组件及其数据,并能够显示项目资源(Project视图中的)的属性;而Unreal Editor的“细节”视图,只能显示关卡中的对象(世界大纲视图中的)的组件及其数据,而不能显示项目资源(内容浏览器中的)的属性。资源的属性、编辑,通过双击资源文件,在独立的编辑器窗口中进行。

项目与资源管理

UE4的项目(Project)和Unity一样,管理一个项目中所有的资源和代码。UE4中的项目内容通过“内容浏览器”查看,相当于Unity的Project视图。内容浏览器中的目录结构,对应磁盘上的目录结构,这点和Unity一致。
导入UE4项目的所有资源,都会被转换成.uasset格式(本质上是特定类型UObject的序列化),不像是在Unity中会保存文件的原格式(.fbx、.tga、.png等等)。所以在处理UE4资源时,要把原格式的文件保存好,在资源更新时,可以使用“重新导入”的功能来更新。
在项目打包发布时,UE4和Unity一样,都是从关卡列表开始,查找所有资源引用,形成最终的发布版本。在Unity中,通过Build Settings来添加需要发布的关卡;而程序运行时动态调用的,非关卡引用的资源,可以放入固定命名的“Resources”、“StreamingAssets”目录中。在UE4中,你也可以通过“项目”的“打包”设置,来管理发布的关卡列表,以及固定包含的资源目录。点击菜单“编辑”“项目设置”,打开项目设置页面,具体的选项是:
  • 项目->打包:List of maps to include in a package build
  • 项目->打包:Additional Directories to cook
如果你在“项目设置”页面中没有找到这两个选项,请注意,右侧页面中,底部中间位置有一个向下的小三角指示,点它即可打开高级选项列表。


对象组件模型


Unity和UE4都是基于组件结构的引擎,也就是说游戏对象是由一系列可重用的组件搭配组合而成的。两个引擎的这个思路的起点是一致的:在Unity中关卡是GameObject的集合,编辑器保存为Scene文件;在UE4中,关卡是Actor的集合,存盘成Map文件。
接下来,两者的思路却大不相同。在Unity中所有的对象都是GameObject类型,class GameObject没有派生类,你也不能够从它派生,所有游戏对象的功能都必须由Component提供,包括我们的游戏脚本:MonoBehavior派生类,也是Component。而在UE4中,并不禁止你从Actor派生,你也可以使用ActorComponent及其派生类对象来组建Actor,但是引擎允许你扩展Actor来实现对象的特定功能。事实上,在UE4中还提供了一系列Actor的派生类,包括Pawn,Controller等等。你可以使用这些类,而且往往你还需要通过继承他们来实现额外的功能或者对底层行为进行调节。这些继承类组成了UE4的Gameplay Framework。


对象层次结构组织

在Unity中所有的GameObject都必定包含一个Transform组件,而Transform组件可以定义父子关系,也就组成了GameObject的父子关系:子对象的Transform是在父对象的空间中定义的;父对象Destroy时,子对象也会被自动Destroy。
在UE4,Actor是一个空壳,没有什么具体的功能(除了实现网络功能外),它甚至没有Transform。Actor支持父子结构关系,ActorComponent也支持父子对象结构。Actor有一个RootComponent,它可以是SceneComponent及其派生类的实例。SceneComponent包含了Transform(即位置、旋转、缩放);RootComponent的Transform即决定了Actor的Transform。SceneComponent可以有子组件,子组件的Transform是定义在父组件的空间中的。
这么说SceneComponent就相当于Unity的Transform了?如果你这么想,那就错了。Unity的Transform很单纯,它本质上就是一个4x4的矩阵,加上父子关系管理,它没有派生类。而SceneComponent代表着一类组件,它是各种可见的组件的基类(这样说有点不准确,它的子类PrimitiveComponent是这个角色),它有一个很深的类派生体系。

关于Prefab

在Unity的工作流程中,Prefab是一个非常核心的功能,在UE3时代,有一个Archetype,实现类似功能。在UE4中,你可以通过Blueprint来实现类似的功能:你可以编辑好一个Actor,然后把它转换成Blueprint class,就相当于一个Prefab。在后续的关卡编辑中你可以把这个Blueprint class拖放到关卡中,创建新的实例;如果你修改这个Blueprint class,关卡中所有的实例对象都会跟着改变。
再具体点说,上述过程是用到了Blueprint的Construction Script功能。我们在关卡中编辑好一个Actor,然后点击“细节”视图中的“蓝图/添加脚本”按钮,你将创建一个新的Blueprint class。在“世界大纲视图”中,这个对象的类型显示变成了“编辑XX Blueprint”。然而Blueprint并不是Prefab,它功能远比Prefab强大,它的目标是使非编程人员可以在内容制作上进行更大力度的把控,几乎可以达到程序员的力度。


这次就先总结到这里,后续还会根据进展陆续分享一些UE4的经验。

2017-03-13 19:23:31 Tonyyan19781 阅读数 2220

最近在做增强现实的项目,在识别出物体特征点后,叠加三维指示图形,需要用到后期渲染。

经过初步筛选,待选的方案有四种,

1,直接使用GDI+ 的方法,利用矩阵运算,透视投影,再做Rasterization,利用GDI的方法绘制到窗口上,所有的东西都要自己来实现。

2,采用OpenGL, 利用跨平台的opengl api绘制三维图形。

3,采用Unity3d或unreal引擎。

4、其他引擎。


      从开发的难易程度上看,直接采用Unit3d或unreal等这些引擎会更方便一些,操作容易上手,资源也很多, 但要学精用透,还是需要跨过很多坑。在扩展开发的角度上看,

其中unity3d需要采用c# 开发,并只能支持到NET2.0,这样限制了很多C#扩展功能的实现;unreal虽然能用C /C++开发,而且也能看到源码,但要弄透彻难度非常大,并且开发特

性也要照通常的C/C++开发差很多。

      其他大部分开源的第三方引擎,要不就是开源的不彻底,要就是封装结构太复杂很难使用;

      直接采用GDI的方式,要做矩阵投影计算、光栅化等,效率很低。

      最后决定采用OpenGL+c/c++的开发方式来实现三维图形的叠加渲染。

      通过一系列的评估,最后采用opengles的API集, 采用OpenGL ES 2.0 Emulator v1.4模拟器在windows7上进行模拟开发,同步在ANDROID的上实现程序。



2019-10-29 17:40:26 qq_43308842 阅读数 176

学习两大商业游戏引擎(Unity 3D,Unreal4)的成神之路

代码初体验

你好! 这是我的第一篇博文我相信这是一个好的开端,每天进步一点这就是很美好的事物,切记勿骄勿躁,踏踏实实。这是我学习c#的一个,我深刻体验到代码是具有灵活性发散性的,很多同学初期学习代码编程完全可以说都是靠copy,将一些模板记住然后改改参数之类的,这无可厚非大家都是这样一步步过来的,但一定要有自己的思想,犯错不可怕,可怕的是你自己故步不前,井底之蛙。这一个月的加强学习让我深刻的明白代码的发散性,代码可能对于计算机来说具有唯一性,但对于人来说它可以是无穷无尽的。很庆幸自己能一步一步的慢慢去学这个有趣的事物。
那么既然想成为一名游戏开发者,你得弄明白两件事。第一:用什么去开发游戏。第二:如何去开发一款游戏。这里我们先来了解你做游戏是用什么去做这可以说是至关重要的一步,你连你做游戏的东西都不知道是个什么,那我相信后面也无从谈起。
我们做游戏所用到的工具——游戏引擎(市面上现在又两大商业引擎Unity3D,Unreal4)。
图片:
在这里插入图片描述

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。
引擎的构成:
游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。
引擎的功能:
经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统共同构成的复杂系统,从建模、动画到光影、粒子特效,从物理系统、碰撞检测到文件管理、网络特性,还有专业的编辑工具和插件,几乎涵盖了开发过程中的所有重要环节,以下就对引擎的一些关键部件作一个简单的介绍。
渲染是引擎最重要的功能之一,当3D模型制作完毕之后,美工会按照不同的面把材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的,它的强大与否直接决定着最终的输出质量。
光影效果,即场景中的光源对处于其中的人和物的影响方式。游戏的光影效果完全是由引擎控制的,折射、反射等基本的光学原理以及动态光源、彩色光源等高级效果都是通过引擎的不同编程技术实现的。
动画,游戏所采用的动画系统可以分为两种:一是骨骼动画系统,一是模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是在模型的基础上直接进行变形。引擎把这两种动画系统预先植入游戏,方便动画师为角色设计丰富的动作造型。
引擎的另一重要功能是提供物理系统,这可以使物体的运动遵循固定的规律。
引擎还有一个重要的职责就是负责玩家与电脑之间的沟通,处理来自键盘、鼠标、摇杆和其它外设的信号。
上面就是对我们手上用来做游戏的引擎很初略的了解。
那么这些游戏引擎又是如何开发,而开发又需要那些技术和知识的支持呢?下面让我来慢慢和大家分享我的一些观点。
首先在这给大家看一幅图
在这里插入图片描述
这张图片可以说攘括了一款游戏引擎所有的技术以及知识
大家如果要自学游戏引擎的制作
最基础要了解:引擎构架,图形引擎,图形基础算法,高级图形技术。
最重要的还是要熟悉c++,c#等基础的编程语言。
大家可以看看这篇如何去开发一个3D引擎。但一定要带有自己的思考,其他行业我不知道,但在程序员这个行业我坚信没有什么所谓的权威,大家都是自己慢慢摸索,不断前进。

2016-07-07 18:54:34 huiyuanliyan 阅读数 2240

VR虚拟现实&AR增强现实编程(2):Unity3D开发环境简介

一 . 简介

VR和AR的开发平台有Unity3D和UNREAL ENGINE。

本系列主要使用Unity3D,因此本篇博文主要对Unity3D进行介绍。先上一张Unity3D的图

这里写图片描述

官方下载地址http://unity3d.com/cn/ 一般用免费的版本就行了

以下是百度百科对Unity3D的介绍

Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件。其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。

Unity3D可以做这么多事情:

Unity3D继承的功能

其实一句话解释起来可以这么说,Unity3D是一个游戏引擎,引擎做的事情就是帮你处理好了那些最基础的算法和代码,比如直接为你创建一个二维或三维的空间,直接帮你设计一切物体的基本物理属性,包括跟windows底层的交互,通过引擎,你设计的东西可以在平台(windows 、安卓、IOS)上运行起来。这里值得一提的是,Unity3D使用的物理引擎不是它自己的,是NVIDIA的Physx物理引擎。

二. 游戏对象

要进行Unity3D开发,必须要了解“游戏对象”这个概念,因为在Unity3D就是对象的世界。Unity3D中具体的架构是这样的:

这里写图片描述

Unity3D的基础教程网上有很多,后续我也会更新,但本系列会着重讲VR和AR是怎么在Unity3D中运行的。

更多问题请留言或发送邮件到:lifeliyan@163.com

没有更多推荐了,返回首页