本指南提供了一个统一的UE4概述从用户的角度出发,旨在帮助你把你现有的统一体验到UE4的世界。 编辑下面是Unity编辑器和虚幻编辑器图片、颜色标志的通用功能。每一块标签显示的等效UE4术语。虚幻编辑器的布局是通过拖放标签周围的完全可定制的。 编辑资产在统一中,检验员标签是用来在您的项目编辑选定的资产。在UE4,的详情面板使选定对象的性质,而较大的编辑任务导致一个专门的窗口或选项卡。新的选项卡式窗口将打开每个编辑的资产,类似于Web浏览器。当然,你可以随意拖动标签或浮他们作为独立的窗口。 快速的词汇下面的部分包含在左,与其等价的UE4共性的统一条款(或相当于)的权利。UE4关键词直接链接到更深入的信息在虚幻引擎的在线文档。
项目和文件所以这些目录和文件是什么?就像统一项目,真实的项目总是存在于自己的目录,有自己的项目文件。你可以双击打开(放)uproject。文件加载您的游戏在虚幻编辑器,或右键单击附加选项。项目文件夹的子文件夹中包含有各种游戏的内容和来源,以及各种配置文件和二进制文件。最重要的是内容和来源子文件夹。 我把我的资产在哪里?在UE4,每个项目都有一个内容文件夹类似于一个统一的项目的文件夹,这就是你的游戏资产的储存。进口资产进入你的游戏,简单的拖放文件到你的工程目录的内容,他们会自动导入并显示在内容浏览器。在编辑器的资产将自动更新,当你更改使用外部程序文件。
多类别 统一 UE4 游戏类型 组件 组件 游戏对象 演员,典当 预制 蓝图类 编辑界面 层次面板 世界的轮廓 检查员 详细信息面板 项目浏览器 内容浏览器 场景视图 视口 网格 网点 静态网格 骨骼蒙皮动画 骨骼网格 材料 着色器 材料,材质编辑器 材料 材料实例 功效 粒子效果 效果,粒子,级联 飞镖 级联 游戏界面 UI 环球唱片(虚幻的运动图形) 动画 动画 Skeletal Animation System Mecanim系统 人物角色,动画蓝图 2D 精灵图像编辑窗体 paper2d 编程 C # C 脚本 蓝图 物理 光线投射 线迹,形状轨迹 刚体 碰撞,物理 运行平台 iOS播放器、网络播放器 平台
哪些常见的文件格式的支持?Unity支持多种文件格式。UE4支持最常见的文件类型: 资产类型支持的格式
3D。FBX,.obj
纹理PNG,JPEG,BMP,。。。热。DDS,。EXR,PSD,HDR。。
声音.wav
字体OTF。TTF。
视频.mov,.mp4,.wmv我的场景如何储存?在统一中,你的游戏对象在现场并且保存为场景的资源文件。幻有地图文件这是类似于一个统一的场景。地图文件存储数据,关于你的水平在它的对象,以及照明数据和一定水平的具体设置。 如何更改我的项目的设置?所有的项目设置可以从主菜单下编辑/项目设置。喜欢Unity的项目设置,这些可以让你指定你的项目信息(如项目名称和图标),配置游戏输入绑定,并定义发动机运行项目时的行为。你可以了解更多关于个人项目设置在这里。统一也有所谓的“播放设置”。在虚幻的,这些都是“网络设置”,可以在你的项目设置“平台”目录下找到。 做我的源文件去哪儿了?在统一中,你习惯于把C #源文件在您的文件夹。
UE4的工作方式不同。对C代码的项目,你会发现来源子文件夹中的项目目录下的文件,有多种,包括C源(.cpp)和头(.h)文件,以及一些构建脚本(。build.cs,。目标。CS)然而,蓝图只有项目将不会有一个源文件夹。 要开始使用C的UE4的最简单方法是使用编辑器将代码添加到项目中(在主菜单文件),或者只是从一个模板创建一个新的C项目从零开始。你可以找到正确的C类内容浏览器能打开的文件在Visual Studio或Xcode的双击在他们的图标。 从物体的演员哪里是我的对象吗?在统一中,一个对象是一个“东西”,可以放在世界。等效UE4是演员。在虚幻编辑器中,你可以拖动一个空的演员到视口的布局面板: 你可以建立一个游戏的空的演员,但UE4还包括内置的功能角色的特殊类型,如一个棋子(球员或AI对象),或字符(动画的生物。)就像空的演员,你可以把演员这些特殊类型,然后添加或自定义属性和组件。以后你会学到更多,但现在记住UE4有游戏框架用这些特殊的演员。 演员在UE4比Unity在一点不同。在统一中,对象是C #类不能直接扩展。在UE4,演员是一个C类,你可以扩展和定制使用继承。我们将谈论这更多的后来! 我的部分在哪里?在统一中,你将组件添加到一个游戏对象给它的功能。 在UE4,将组件添加到演员。当你掉到了一个空的演员在你的水平上,单击“添加组件”按钮(在详情面板),选择要添加的组件。在这里,我们把一个空的演员创造一个火炬,然后添加一个网格的基础组成部分,其次是光源,然后粒子系统创建它的火焰。 在统一中,一个物体将平坦的组件列表,但在UE4演员实际上包含了层次结构连接到另一个组件。你可以在上面的例子中看到,那里的光线和粒子附着在网。这有一些重要的影响后复杂的演员和游戏对象。 从统一预设到UE4蓝图类统一的工作流是基于预设。在你建立一套统一的游戏对象和组件,然后从中创建一个预设件。然后你就可以将你在世界预设实例,或在运行时实例化。 UE4的相应的工作流是基于图纸类。在UE4,你建立一个演员的成分,选择它,并点击图/添加脚本按钮(在详情面板)。然后,选择一个地方保存你的蓝图,并单击创建蓝图保存您的新图纸类! 你新的蓝图的类中可以找到内容浏览器。你可以双击直接编辑它们,或者你可以将它们拖放到任何程度。 在脚本组件和MonoBehaviour?在统一中,你的脚本组件,你滴游戏对象添加C #脚本。你创建一个类,继承自MonoBehaviour定义什么,分。 UE4具有类似的东西。你可以创建你自己的全新的组件类和降到任何演员。你可以使用脚本或创建组件的类C的蓝图。 那么你如何在UE4创建自己的组件类?在详情面板的添加成分的下拉菜单中,你可以创建新的组件,或选择现有的: 在统一中,创建一个新的MonoBehaviour时,你会得到一个start()函数和一个update()功能骨架类文件。 在UE4,您还将得到一个initializecomponent()功能和tickcomponent()功能框架类,执行类似的启动和更新功能。 如果你创建了一个蓝图脚本组件会给你这些相同的功能作为视觉节点: 编图人员类这是一个很酷的功能:UE4新演员蓝图类可以有自己的蓝图可视化脚本!这允许你添加逻辑到整个对象,不仅是一个单独的组件。结合继承(下面解释),这给了你很大的灵活性,在设计你的游戏。 除了蓝图类支持可视化脚本,UE4还支持C类实现代码。这里有两个,并排。 C #统一UE4 C
使用 UnityEngine;使用 系统。收藏;公共 班 mycomponent : MonoBehaviour{ int 计数; / /使用这个初始化。 无效 开始 () { 计数 = 零; } / /更新为每帧。 无效 更新 () { 计数 = 计数 一; 调试。日志(计数); }}#杂注一旦#包括 “gameframework /演员。”#包括 “myactor.generated.h”UCLASS()班 amyactor : 公共 aactor{generated_body() int 计数; //设置此演员的属性的默认值。 amyactor() { //允许tick()被称为 primaryactortick。bcanevertick= 真正的; } / /游戏开始时或者当催生了所谓的。 无效 beginplay() { 超级的::beginplay(); 计数 = 零; } //所谓的每一帧。 无效 蜱(浮动 deltaseconds) { 超级的::蜱(deltaseconds); 计数 = 计数 一; 蒟蒻->日志(fstring::fromint(计数)); }};UE4蓝图
UE4蓝图类可以扩展统一预制,UE4蓝图的类可以实例化你的游戏同样。然而,统一在其他预设的嵌套问题相关的并发症,限制了其可扩展的构建块的作用。 在UE4,你可以创建一个新的蓝图,蓝图类扩展现有的类和增强它与新的性质,成分,和视觉脚本的功能。 例如,你可以创建一个蓝图在UE4类命名的怪物实现怪物的基本功能如追人。然后你可以创造更多的蓝图类扩展,如龙(一种怪物增加了喷火的特征),绿蓝(怪物会吃了你天黑时),例如8人。这些子类继承的所有基本功能的怪物,怪物,和顶部添加新功能。 在统一中,你将实现通过创造许多不同的对象分类:一为龙,一为绿蓝,等等。现在,说你想给所有怪物增加一些新的功能,比如说使用新的说话分量的能力。在统一中,要更新所有10个问题分别复制并粘贴到新的功能。 在UE4,你可以简单地修改怪物蓝图类中添加新的说话能力。这是所有!龙,绿蓝,和怪物的其他8类自动继承新的说话功能,你不需要触摸它们。 但有更多的!我们这里所说的关于蓝图类也适用于C类的一切,都是同样真实的演员和组件。这些系统被设计为支持可扩展功能的大规模发展,并可以扩展到10或100的开发商的项目。 我应该使用蓝图的脚本,C,或者两者都有?蓝图可视化脚本是理想的简单的游戏逻辑流程和顺序动作。这是一个伟大的设计师,艺术家和视觉导向系统,程序员,因为它很容易访问和控制游戏中的物体在视觉上。你甚至可以只使用蓝图创建小的单机游戏;看到一个完整的例子tappy鸡肉样品。 C编程是较大规模的任务,如建筑的玩法系统,复杂的AI,和新的引擎功能。如果你已经有了一些经验,看看C编程的UE4的介绍网页 大多数项目将使用一个混合的蓝图和C。许多开发商的原型游戏功能使用的蓝图,因为它是如此的方便和乐趣,后来把它的部分或全部C的性能和工程的严谨性。 蓝图类可以扩展C类大部分的UE4游戏开发的魔力来自程序员C实施新的功能之间的相互作用,与设计师和利用他们的蓝图的艺术家再要求更多!这就是一个团队可能结构的UE4基于射击游戏使用混合的C类系统编程实现拾音器,以及行为和外观图纸类: 变换元件在每个对象有一个统一的转换组件,使物体的位置、旋转和规模在世界上。 在同样的UE4股,有一个演员根组件,可以是任何类场景组件。一场景组件给演员的位置,旋转和规模在世界上是应用于分层的所有组件在它下面。许多组件,您将使用子类从场景的组成部分,因为它有一个位置是很有用的! 即使你将一个空的演员,UE4将创建一个“默认场景根”,演员,这只是一个普通的场景组件。如果你把一个新的场景组件在你自己,它将取代默认场景根。 复合对象在统一中,你创建复合对象,通过构建一个层次结构对象和养育他们的变换: 在你创建UE4,游戏对象的嵌套层次复合组件: 正如你可以看到从图,嵌套的层次结构可以通过附加组件到另一个场景了,因为他们有一个变换类似于统一教养改造。演员组成(所有组件的基类)可以直接连接到演员本身。 我建立的一切成分?它真的取决于你,但你会经常结合使用自定义组件类型随着演员类,使用这些组件。我们提到过这之前,但UE4有很多的演员,保证一定水平的能力,总是有某些部件的特殊类型。例如,一个人物总是包含一个角色的移动部件。 有几种类型的子类的演员你会很快在发动机遇到并且是有用的在几乎所有类型的游戏。这里是一个名单,我们最常见的内置的演员: - 典当-一种类型的演员代表一个可控的游戏对象,通常玩家的化身。当被玩家和AI都通过一个拥有控制器。
- 人物一个更专业的版本的棋子设计的双足的化身,处理很多这类游戏对象的复杂性。
- 控制器-拥有和控制的棋子。由控制器分离的棋子,你可以写人工智能控制器,可以操纵的棋子的玩家将使用相同的接口。
- 玩家控制一个更专业的控制器设计从玩家的游戏手柄,触摸输入,或鼠标/键盘,并使用输入驱动典当或性格具有。
所以一切都是演员吗?不是一切。男演员是最常见的一类用于游戏的UE4和唯一能被催生了进入全球。所以你的一切放在你的水平将是一个演员。 要知道其他重要类型目标。对象实际上是所有虚幻的类的基类,包括演员和许多其他的。这是一个非常低的水平的结构比演员,但仍有功能,你会期望从一个虚幻的类,如反射和序列化。对象是一个很基本的类,我们使用的时候我们需要定义一个新的类型,就不适合一个模具演员。例如,演员组成是所有组件的基类,并派生自目标而不是演员。 这种游戏框架的东西在UE4是什么?好吧,这就是事情变得有点疯狂(在一个可怕的方式排序。)统一给你一个干净的石板开始设计你的游戏,和真实的一样。你可以在统一建立的一切基本的游戏对象和组件,和虚幻的你可以建立所有的演员和组件。 然而虚幻这上额外的一层称为游戏框架。这真的不存在在统一在所有。你不需要使用它是不真实的,但它实际上是超级酷!基本上,如果你使用一些基本的原始类和遵循一定的惯例,你的游戏将获得一些很酷的特性自动,否则将很难实现或改造(如全面支持多人游戏!) 无数可怕的游戏已经上虚幻的游戏框架设计,这是值得花一些时间来了解它是如何工作的。是的,你可以把你自己的这个。如果你想,现在已经完全好了!但可怕的虚幻开发数百人今天在这个框架使用UE4伟大,所以值得花一些时间来学习。 使用的游戏框架,你真的需要学习的课程包括定制的内置的演员与虚幻,如典当,人物,和玩家控制,并最终了解真实的复制和网络功能的工作。现在,让我们回到基础虽然。 如何在UE4写代码所以,我用来编程的MonoDevelop蓝图的脚本,你只需要虚幻编辑器--一切都是建立在!用C编写的代码,下载Visual Studio免费版在Windows中,或安装Xcode在Mac。当你第一次创建一个新项目(或将代码添加到现有的项目),UE4会自动为您创建Visual Studio项目文件。你可以打开Visual Studio的双击在一个类里面内容浏览器,或点击打开Visual Studio在主文件菜单按钮。 在UE4一个重要区别:有时你会需要手动刷新您的Visual Studio项目文件(例如,在下载一个新版本的UE4,或者当手动更改源文件位置在磁盘上。)你可以通过点击刷新的Visual Studio项目在主菜单,或通过右键单击在uproject文件。在你的项目目录和选择生成Visual Studio项目文件。 写作活动功能(启动、更新等)如果你是用monobehaviors你用来启动、更新等方法,并使用。这里是一个团结的行为及其在UE4演员和组件对应的比较。 在统一中,我们可能有一个简单的组件看起来像这样: 公共 班 mycomponent : MonoBehaviour{ 无效 开始() { } 无效 onDestroy() { } 无效 更新() { }}但请记住,在你写代码UE4对演员本身而不是唯一编码的新的组件类型。这其实是很常见的和有用的。 类似于统一的开始,使用,和更新的功能,我们有一个类似的演员在UE4方法: C: UCLASS()班 amyactor : 公共 aactor{generated_body() “/大学开始游戏。 无效 beginplay(); “当/破坏。 无效 摇杆(const eendplayreason::类型 endplayreason); //所谓的每一帧更新这个演员。 无效 蜱(浮动 deltaseconds);};蓝图: 组件在UE4包含不同的功能。这里是一个简单的例子: C: UCLASS()班 umycomponent : 公共 uactorcomponent{generated_body() / /在拥有演员被称为 无效 initializecomponent(); //调用时,组件或拥有演员被破坏 无效 uninitializecomponent(); 蜱/组件版本 无效 tickcomponent(浮动 Δtime, 枚举 eleveltick ticktype, factorcomponenttickfunction* thistickfunction);};蓝图: 记住,在UE4是调用父类的版本的方法的重要。
例如,在统一的C #这将被称为基地。update(),但UE4 C我们将使用超::tickcomponent(): 无效 umycomponent::tickcomponent(浮动 Δtime, 枚举 eleveltick ticktype, factorcomponenttickfunction* thistickfunction){ / /自定义滴答的东西在这里 超级的::tickcomponent(Δtime, ticktype, thistickfunction);}你可能已经注意到有些事情开始与“一”和其他“U”C。前缀“一”表示一个演员的子类。而作为前缀“U”表示目标子类。还有一些其他的前缀,例如“F”用于大多数纯数据结构或非uobject类。 在编写游戏代码UE4好吧,事情会变得深一点从这里出去。我们将谈论的是创建游戏关键的编程问题。因为你知道团结,我们将解释向用户学习C #虚幻C倾斜功能,但您可以使用蓝图的脚本几乎一切你想要的!我们在C和蓝图,那里可能还有增加的例子。 让我们来谈谈一些最常见的游戏编程模式,你将如何在虚幻的接近他们。在统一的许多功能在虚幻的类似的功能,应该很熟悉。我们将通过最常用的功能之一。 实例化对象/产卵的演员在统一中,我们使用实例化函数来创建新的对象实例。
这个函数接受任意UnityEngine。对象的类型(对象、MonoBehaviour,等等),使它的一个副本。 公共 游戏对象 enemyprefab;公共 vector3 spawnposition;公共 四元数 spawnrotation;无效 开始(){ 游戏对象 新高度 = (游戏对象)实例化(enemyprefab, spawnposition, spawnrotation); 新高度。姓名= “mynewgameobject”;}在UE4,有几个不同的函数来实例化对象,根据你的需要。新对象是用于创建新的uobject类型,和spawnactor用于产卵aactor类型。 首先我们将简要地谈谈uobjects和新对象。子uobject在虚幻的就像子scriptableobject团结。他们是有用的为游戏类,不需要刷新到世界或有附加元件像演员一样。 在统一中,如果你创造了你自己的子类实例化scriptableobject,你可以像这样: myscriptableobject 纽索 = scriptableobject。方法<myscriptableobject>();在虚幻的,如果你创造了你自己的uobject派生类型,您可以实例化这样: umyobject* newobj = 新对象<umyobject>();所以什么演员?演员是催生了使用spawnactor方法在世界(由我世界C)对象。你如何让世界的对象吗?一些uobjects提供你getworld方法,例如,所有的演员都。 你将通过在另一个演员的通知,我们通过在“类”的演员要产卵。在我们的例子中,类可以被任何类amyenemy。 但如果你想做一个“复制”的另一个对象的实例化,喜欢什么让你做? 的新对象,spawnactor功能还可以得到一个“模板”对象的工作。虚幻的是复制一个对象,而不是做一个“从零开始”。这将复制所有的upropertys和组件。 amyactor* createcloneofmyactor(amyactor* existingactor, fvector spawnlocation, frotator spawnrotation){ 由我世界* 全球 = existingactor->getworld(); factorspawnparameters spawnparams; spawnparams。模板 = existingactor; 全球->spawnactor<amyactor>(existingactor->getClass(), spawnlocation, spawnrotation, spawnparams);}你可能想知道“白手起家”就是在这样的背景下。每个对象的类创建具有默认模板包含默认值的属性和组件。如果你不重写这些属性并没有提供自己的模板,不使用这些默认值来创建你的对象。为了帮助说明这一点,让我们先看看MonoBehaviour例如: 公共 班 mycomponent : MonoBehaviour{ 公共 int myintprop = 四十二; 公共 spherecollider mycollisioncomp = 空; 无效 开始() { //创建碰撞组件,如果我们不已经有一个了 如果 (mycollisioncomp == 空) { mycollisioncomp =游戏对象。addcomponent<spherecollider>(); mycollisioncomp。机构= vector3。零; mycollisioncomp。半径= 20.0f; } }}在上面的例子中,我们有一个int属性的默认值为42,和spherecollider组件,默认为半径20。 我们可以在不使用对象的构造函数实现相同的事情。 UCLASS()班 amyactor : 公共 aactor{generated_body()uproperty()int32myintprop;uproperty() uspherecomponent* mycollisioncomp; amyactor() { myintprop = 四十二; mycollisioncomp = createdefaultsubobject<uspherecomponent>(名(文本(“collisioncomponent”)); mycollisioncomp->相对位置 = fvector::零矢量; mycollisioncomp->sphereradius = 20.0f; }};在amyactor构造函数,我们把类的默认属性值。注意这个createdefaultsubobject函数的使用。我们可以使用它来创建组件和分配给他们的默认属性。所有的子对象将这个功能作为一个默认的模板,所以我们可以修改它们的子类或蓝图。 铸造为另一种类型在这种情况下,我们得到了一个组件,我们知道我们有,然后扔到一个特定的类型和条件做某事。 C #统一: 对撞机对撞机=游戏对象。GetComponent<对撞机>;spherecolliderspherecollider=对撞机作为 spherecollider;如果 (spherecollider!= 空){ / /…}UE4 C : uprimitivecomponent* 原始的 = myactor->getcomponentbyclass(uprimitivecomponent::staticclass());uspherecomponent* spherecollider = 铸造<uspherecomponent>(原始的);如果 (spherecollider != nullptr){ / /…}破坏对象/演员统一C蓝图
破坏(mygameobject);myactor->破坏();
破坏对象/演员(1秒)统一C蓝图
破坏(mygameobject, 一);myactor->setlifespan(一);
全视图中单击。
禁用对象/演员统一C蓝图
mygameobject。setactive(假);可见/ hides部件myactor->setactorhiddeningame(真正的);//disables碰撞组件myactor->setactorenablecollision(假);/ /停止演员滴答作响myactor->setactortickenabled(假);
全视图中单击。
从组件访问GameObject /演员统一C蓝图
游戏对象 parentgo = mycomponent。游戏对象; aactor* parentactor = mycomponent->getOwner();
全视图中单击。
访问的对象/演员的一部分统一 mycomponent 迈肯 =游戏对象。GetComponent<mycomponent>();C umycomponent* 迈肯 = myactor->findcomponentbyclass<umycomponent>();蓝图 找对象/演员/ /找对象的名字游戏对象 MyGo = 游戏对象。发现(“mynamedgameobject”);城市/找对象类型mycomponent[ ] 组件 = 目标。findobjectsoftype(类型(mycomponent)) 作为 mycomponent[ ];foreach (mycomponent 组件 进入 组件){ / /…}找到游戏对象/城市带游戏对象[ ] 游戏对象 = 游戏对象。findgameobjectswithtag(“mytag”);foreach (游戏对象去进入 游戏对象){ / /…}/ /找演员的名字(也uobjects)aactor* myactor = 查找对象<aactor>(nullptr,文本(“mynamedactor”));/ /找演员的类型(需要由我世界的对象)为 (tactoriterator<amyactor> IT(getworld()); IT; IT){ amyactor* myactor = *IT; / /…}找到uobjects /城市类型为 (tobjectiterator<umyobject> IT; IT; IT){ umyobject* MyObject = *IT; / /…}/ /找演员的标签(也actorcomponents,使用tobjectiterator代替)为 (tactoriterator<aactor> IT(getworld()); IT; IT){ aactor* 演员 = *IT; 如果 (演员->actorhastag(名(文本(“mytag”)))) { / /… }}添加标签对象/演员mygameobject。标签= “mytag”;/ /演员可以有多个标签myactor。标签。addunique(文本(“mytag”));添加标签MonoBehaviours / actorcomponents//这改变它所附属的游戏对象的标签mycomponent。标签= “mytag”;/ /部件有各自为阵的标签mycomponent。componenttags。addunique(文本(“mytag”));比较标签对象/演员/ actorcomponents MonoBehaviours如果 (mygameobject。comparetag(“mytag”)){ / /…}/ /检查它所附属的游戏对象的标签如果 (mycomponent。comparetag(“mytag”)){ / /…}/ /检查是否一个演员这个标签如果 (myactor->actorhastag(名(文本(“mytag”)))){ / /…}/ /检查如果actorcomponent这个标签如果 (mycomponent->componenthastag(名(文本(“mytag”)))){ / /…}物理:刚体与原始成分在统一给任何物体的物理特性,你先给它一个刚体组件。在虚幻的,任何primitivecomponent(uprimitivecomponent C)可以是一个物理对象。一些常见的原始成分shapecomponents(胶囊、球体、盒),staticmeshcomponent,和skeletalmeshcomponent。 与统一之间的碰撞和可视化的责任为单独的组件。虚幻的结合潜在的物理和潜在可见成primitivecomponent概念。任何组件会在世界上任何几何形状,这可以被绘制或物理子类从primitivecomponent互动。 层与渠道在统一中,他们被称为“层”。UE4采用碰撞的渠道,他们的工作在一个类似的方式。你可以阅读到他们在这里。 在与光线追踪C #统一: 游戏对象 findgocameraislookingat(){ vector3 开始 = 相机。主要。转型。位置; vector3 说明书 = 相机。主要。转型。向前地; 浮动 距离 = 100.0f; int layerbitmask = 一 << 图层蒙版。nametolayer(“典当”); raycasthit 打; 布尔沙丘= 物理。光线投射(开始, 说明书, 外面的 打, 距离, layerbitmask); 如果 (沙丘) { 退货 打。对撞机。游戏对象; } 退货 空;}UE4 C : apawn* amyplayercontroller::findpawncameraislookingat(){ /你可以使用这个自定义的微量的各种性质 fcollisionqueryparams 参数; / /忽略玩家的棋子 参数。addignoredactor(getpawn()); / /命中结果填充的线迹 fhitresult 打; / /光线投射出来的相机,只有碰撞兵(他们在ecc_pawn碰撞通道) fvector 开始 = playercameramanager->getcameralocation(); fvector 终点 = 开始 (playercameramanager->getcamerarotation()。矢量() * 1000.0f); 布尔沙丘= getworld()->linetracesingle(打, 开始, 终点,ecc_pawn, 参数); 如果 (沙丘) { / /打。演员包含一个弱的指向演员,跟踪打击 退货 铸造<apawn>(打。演员。得到()); } 退货 nullptr;}UE4的蓝图:
全视图中单击。 触发器C #统一: 公共 班 mycomponent : MonoBehaviour{ 无效 开始() {对撞机。istrigger= 真正的; } 无效 ontriggerenter(对撞机 其他) { / /… } 无效 ontriggerexit(对撞机 其他) { / /… }}UE4 C : UCLASS()班 amyactor : 公共 aactor{generated_body() / /我的扳机组件uproperty() uprimitivecomponent* 触发; amyactor() { 触发 = createdefaultsubobject<uspherecomponent>(文本(“triggercollider”)); 两个对撞机/需要看到这两个有两个威胁。 触发。bgenerateoverlapevents= 真正的; 看过《碰撞/时尚的对撞机 //这种模式只会使raycasts,对撞机扫,和重叠 触发。setcollisionenabled(ecollisionenabled::queryonly); } 虚拟 无效 notifyactorbeginoverlap(aactor* 其他) 重写; 虚拟 无效 notifyactorendoverlap(aactor* 其他) 重写;};UE4的蓝图: 你可以阅读更多关于设置碰撞反应在这里。 运动学刚体C #统一: 公共 班 mycomponent : MonoBehaviour{ 无效 开始() {刚体。iskinimatic= 真正的;刚体。速度=转型。向前地* 10.0f; }}在UE4,碰撞组件和刚体组件是一个。这个基类是uprimitivecomponent,里面有很多子类(uspherecomponent,ucapsulecomponent、等)以适合你的需要。 UE4 C : UCLASS()班 amyactor : 公共 aactor{generated_body()uproperty() uprimitivecomponent* physicalcomp; amyactor() { physicalcomp = createdefaultsubobject<uspherecomponent>(文本(“collisionandphysics”)); physicalcomp->setsimulatephysics(假); physicalcomp->setphysicslinearvelocity(getactorrotation()。矢量() * 100.0f); }};输入事件C #统一: 公共 班 myplayercontroller : MonoBehaviour{ 无效 更新() { 如果 (输入。getbuttondown(“火”)) { / /… } 浮动 水平 = 输入。getaxis(“水平”); 浮动 垂直 = 输入。getaxis(“垂直”); / /… }}UE4 C : UCLASS()班 amyplayercontroller : 公共 aplayercontroller{generated_body() 无效 setupinputcomponent() { 超级的::setupinputcomponent(); inputcomponent->bindaction(“火”,ie_pressed, 这, &amyplayercontroller::handlefireinputevent); inputcomponent->bindaxis(“水平”, 这, &amyplayercontroller::handlehorizontalaxisinputevent); inputcomponent->bindaxis(“垂直”, 这, &amyplayercontroller::handleverticalaxisinputevent); } 无效 handlefireinputevent(); 无效 handlehorizontalaxisinputevent(浮动 价值); 无效 handleverticalaxisinputevent(浮动 价值);};UE4的蓝图: 这就是你输入的属性在您的项目设置可能看起来像: 你可以阅读更多关于如何设置输入在这里。 常见问题如何载入我的最后一个项目自动?如果你是用统一的最后一个项目,你的工作会自动加载,同样可能在UE4。启用,选中“总是在启动时加载“打开项目时,最后一个项目。你也可以在任何时候切换设置主要从编辑菜单下的编辑/编辑的喜好/加载和保存/启动。
我在哪里设置输入绑定我的游戏吗?在统一中,你使用的输入管理器设置为项目设置默认绑定。它同样在UE4。你会打开你的项目设置,然后选择输入类型。在那里,你可以添加各种按钮(行动)和模拟控制(轴)。给每个控件的名称和默认绑定。然后,你可以得到回调你的游戏的棋子当输入事件被触发。检查了输入文件的页面详情。 我怎样改变我的项目开始的场景吗?You can change the startup map of your project from the project settings tab. From the main menu choose Edit/Project Settings->Maps & Modes to change the starting map. 我如何经营我的游戏吗?你运行游戏的最简单的方法是点击主编辑工具栏的“播放”按钮,将里面的编辑过程中对运行游戏。如果你想作为一个独立的应用程序运行时,单击“下一步”,“玩”并选择“单机游戏下拉箭头”。最后,如果你想运行在移动设备上或在一个Web浏览器,你可以使用工具栏上的“启动”按钮(安装任何先决条件为平台,需要经过) 这些是什么单位?在统一中,测量的基本单位是一米。在UE4、测量的基本单位是厘米。 所以如果你搬东西1单位(米)在统一中,相当于移动的东西100单位(厘米)在UE4。 如果你想移动的东西2英尺的统一,将0.61units(米)和61单位(厘米)UE4。 这个坐标系统是什么?是方式?统一UE4使用左手坐标系,但轴互换左右。在UE4,正X是“前进”,正是“正确的”,正是“Z”。 如何从我的游戏中看到日志输出?In the UE4 editor, you can open the "Output Log" from the "Window -> Developer Tools" menu. You can also run your game with the "-log" command-line parameter to summon a dedicated log window alongside your game, which is really useful! 说到日志输出,哪里是我的调试日志?登录UE4是高度可定制的。阅读关于如何登录信息在这里。 我如何抛出异常?在统一中,你用来抛出异常,当事情出错。UE4不使用异常处理。相反,使用“check()功能触发临界断言错误。你可以在一个错误的信息传递。如果你想报告一个错误但不停止程序,用ensure()相反。这会产生一个错误和一个完整的调用堆栈,但是程序继续执行。如果你有一个调试器附加功能,都将进入调试器。 哪里是.net框架?与统一,UE4不使用.NET框架。UE4有自己的一套容器类和库。比较常见的容器: NET框架UE4
字符串fstring,F文字
列表tarray
词典TMAP
好试验你可以学习更多关于其他UE4的容器在这里。 是虚幻的自动加载代码的变化?是的!你可以离开编辑器打开当你写代码。简单地启动一个编译Visual Studio在您完成编辑代码,和编辑将“热加载你的变化自动。你也可以点击编译在编辑器的主工具栏按钮。这可能是有用的当你有Visual Studio调试器连接。 从这里去哪里阅读指导,谢谢!这是用虚幻的开发商到处帮助社区创造的虚幻,我们非常感谢你能提供任何反馈和修正。我们将努力提高本文件为我们了解什么是最有帮助的时候,过渡到UE4! 我们有许多额外的UE4的学习资源!
|