2016-11-22 13:37:26 u013131744 阅读数 3250
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2392 人正在学习 去看看 杨石兴

201922rb1l3syoyu1glbys

当你运行我们上次做完的项目,你可能会意识到我们移动的摄像机还是默认的那个摄像机,这个默认的摄像机可以自由飞翔。这一节,我们要使得开始的角色是我们的一个Avatar类的实例对象,并且使用键盘控制我们的角色。

创建游戏模式类

1. 创建游戏模式的步骤如下:
1) 点击文件 --> 新建C++类。
2) 选择Game Mode(游戏模式)。
3) 将其命名为“MyGameMode1”。
4) 点击创建类。

什么是GameMode?GameMode包含了各种各样的游戏规则和让游戏引擎描述这个游戏是怎么玩的。

2. 创建游戏模式的蓝图
UE4会自动启动VS开发环境,然后我们来创建MyGameMode1蓝图:

1) 如图所示操作:

2) 填写蓝图名称,我这里是“BP_GameMode1”,然后点好。

3) 从右侧的细节面板中的Default Pawn Class的下拉选项中选择上次我们创建好的角色蓝图BP_Avatar。

什么是Default Pawn Class?Default Pawn Class就是被角色使用的那一类物体,也就是可以被玩家控制的Actor角色。

4) 点击工具栏的保存,然后退出。

现在运行游戏的话,你可以看到我们使用的摄像头已经是BP_Avatar角色所包含的摄像头了。但是现在还是控制不了角色,因为我们还没设置控制器输入。

设置检测键盘输入

1) 点击工具栏的设置,然后点击项目设置。


2) 接下来,点击左侧面板的输入,然后在Axis Mappings(按键映射)后面点击加号,再点击前面的小三角形展开。输入一个名为Forward(前进)的按键映射,然后下面选择W键。接着再添加一个名为Back(后退)的按键映射,然后下面选择D键。Left(左移)对应A键,Right(右移)对于D键。

3) 直接关闭该窗口以保存设置。

通过C++代码控制角色行走

1) 现在打开你的VS里面的Avatar.h构造器,添加五个成员函数的声明:
  1. //添加如下三个成员函数,用于角色控制:
  2. void SetupPlayerInputComponent(class UInputComponent* InputComponent) override; //覆写虚函数,当有输入的时候被调用以绑定功能
  3. void MoveForward(float amount);
  4. void MoveBack(float amount);
  5. void MoveLeft(float amount);
  6. void MoveRight(float amount);
并删除原有的这一行:
virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;

2) 然后在Avatar.cpp完成函数体定义:
  1. //游戏开始时被调用以绑定设备输入功能
  2. void AAvatar::SetupPlayerInputComponent(class UInputComponent* InputComponent)
  3. {
  4. check(InputComponent); //检查空指针
  5. InputComponent->BindAxis("Forward", this, &AAvatar::MoveForward);
  6. InputComponent->BindAxis("Back", this, &AAvatar::MoveForward);
  7. InputComponent->BindAxis("Left", this, &AAvatar::MoveRight);
  8. InputComponent->BindAxis("Right", this, &AAvatar::MoveRight);
  9. }
上面的InputComponent::BindAxis(...)函数用于将按键信息于函数调用绑定。例如当玩家按下W键,引擎就会检测到有我们之前命名的"Forward"按键信息,然后自动去调用当前类的AAvatar::MoveForward(float amount)函数。其它三个按键也是如此运作。所以接下来定义好这四个函数就可以了,这里的参数amount是设备输入量经过与scale相乘后得出的结果:
  1. void AAvatar::MoveForward(float amount)
  2. {
  3. // Controller控制器当前拥有该actor。例如如果当前角色死了,actor不存在了,此时Controller控制器没有拥有任何一个actor,那么如果我们还想去控制它,就会出错。
  4. // 如果控制器没有拥有actor或者移动量是0,不能进入该函数。
  5. if (Controller && amount)
  6. {
  7. // GetActorForwardVector()取得角色向前的向量
  8. FVector fwd = GetActorForwardVector();
  9. // 我们调用AddMovementInput来在‘fwd’向量的方向上移动角色‘amount’个单位
  10. AddMovementInput(fwd, amount);
  11. }
  12. }
  13. void AAvatar::MoveBack(float amount)
  14. {
  15. if (Controller && amount)
  16. {
  17. // GetActorForwardVector()取得角色向前的向量,加上负号,该向量就向后,所以取得了角色向后的向量
  18. FVector back = -GetActorForwardVector();
  19. AddMovementInput(back, amount);
  20. }
  21. }
  22. // 后面的函数类似前面,很容易懂
  23. void AAvatar::MoveLeft(float amount)
  24. {
  25. if (Controller && amount)
  26. {
  27. FVector left = -GetActorRightVector();
  28. AddMovementInput(left, amount);
  29. }
  30. }
  31. void AAvatar::MoveRight(float amount)
  32. {
  33. if (Controller && amount)
  34. {
  35. FVector right = GetActorRightVector();
  36. AddMovementInput(right, amount);
  37. }
  38. }

设置检测鼠标移动

接下来我们用第二步同样的操作打开项目设置并添加Yaw和Pitch按键信息,分别对应的是鼠标的X坐标和Y坐标。

注意Yaw的意思是绕竖轴旋转,Pitch的意思是绕横向轴旋转。见下图:

通过C++代码控制角色镜头

在Avatar.h你需要添加两个函数声明:
  1. void Yaw(float amount);
  2. void Pitch(float amount);
然后在Avatar.cpp中实现它们:
  1. void AAvatar::Yaw(float amount)
  2. {
  3. if (Controller && amount)
  4. {
  5. // AddControllerYawInput()函数用于改变控制器的Yaw变量,即增加纵向轴旋转量。
  6. // GetWorld()函数取得世界指针UWorld*,通过世界指针调用GetDeltaSeconds()取得每帧耗费的时间。
  7. // 之所以要乘以每帧耗费的时间,是为了使得每一【秒】都增加200.0f * amount的改变量。
  8. // 如果不乘以每帧耗费的时间,那么每一【帧】都会增加200.0f * amount的改变量。(注意由于每秒渲染量不同,所以每秒的帧数不一定是固定的。)
  9. // 通过帧数来控制变量,那么游戏看起来就不那么流畅。试想,机子性能好的时候游戏角色动作就迅速,机子性能差的时候游戏角色动作就慢,这对于玩家公平吗?
  10. AddControllerYawInput(200.f * amount * GetWorld()->GetDeltaSeconds());
  11. }
  12. }
  13. // 下面的函数与上面雷同,不再赘述
  14. void AAvatar::Pitch(float amount)
  15. {
  16. if (Controller && amount)
  17. {
  18. AddControllerPitchInput(200.f * amount * GetWorld()->GetDeltaSeconds());
  19. }
  20. }
在void AAvatar::SetupPlayerInputComponent(class UInputComponent* InputComponent)函数体的下面添加这两条语句将输入信息和函数绑定:
  1. InputComponent->BindAxis("Yaw", this, &AAvatar::Yaw);
  2. InputComponent->BindAxis("Pitch", this, &AAvatar::Pitch);

完整代码贴出

Avatar.h完整代码如下:
  1. #pragma once
  2. #include "GameFramework/Character.h"
  3. #include "Avatar.generated.h"
  4. UCLASS()
  5. class DEMO1_API AAvatar : public ACharacter
  6. {
  7. GENERATED_BODY()
  8. //添加如下五个成员函数,用于角色控制:
  9. void SetupPlayerInputComponent(class UInputComponent* InputComponent) override; //覆写,游戏开始时被调用以绑定设备输入功能
  10. void MoveForward(float amount);
  11. void MoveBack(float amount);
  12. void MoveLeft(float amount);
  13. void MoveRight(float amount);
  14. void Yaw(float amount);
  15. void Pitch(float amount);
  16. public:
  17. // 设置角色属性的默认值
  18. AAvatar();
  19. // 当游戏开始的时候被调用
  20. virtual void BeginPlay() override;
  21. // 每帧被调用
  22. virtual void Tick( float DeltaSeconds ) override;
  23. };

Avatar.cpp完整代码如下:
  1. #include "Demo1.h"
  2. #include "Avatar.h"
  3. // 设置默认值
  4. AAvatar::AAvatar()
  5. {
  6. // 设置这个角色每帧调用Tick()。 如果不需要的话你可以关掉它以提高性能。
  7. PrimaryActorTick.bCanEverTick = true;
  8. }
  9. // 当游戏开始时调用它
  10. void AAvatar::BeginPlay()
  11. {
  12. Super::BeginPlay();
  13. }
  14. // 每帧被调用
  15. void AAvatar::Tick( float DeltaTime )
  16. {
  17. Super::Tick( DeltaTime );
  18. }
  19. //游戏开始时被调用以绑定设备输入功能
  20. void AAvatar::SetupPlayerInputComponent(class UInputComponent* InputComponent)
  21. {
  22. check(InputComponent); //检查空指针
  23. InputComponent->BindAxis("Forward", this, &AAvatar::MoveForward);
  24. InputComponent->BindAxis("Back", this, &AAvatar::MoveForward);
  25. InputComponent->BindAxis("Left", this, &AAvatar::MoveRight);
  26. InputComponent->BindAxis("Right", this, &AAvatar::MoveRight);
  27. InputComponent->BindAxis("Yaw", this, &AAvatar::Yaw);
  28. InputComponent->BindAxis("Pitch", this, &AAvatar::Pitch);
  29. }
  30. void AAvatar::MoveForward(float amount)
  31. {
  32. // Controller控制器当前拥有该actor。例如如果当前角色死了,actor不存在了,此时Controller控制器没有拥有任何一个actor,那么如果我们还想去控制它,就会出错。
  33. // 如果控制器没有拥有actor或者移动量是0,不能进入该函数。
  34. if (Controller && amount)
  35. {
  36. // GetActorForwardVector()取得角色向前的向量
  37. FVector fwd = GetActorForwardVector();
  38. // 我们调用AddMovementInput来在‘fwd’向量的方向上移动角色‘amount’个单位
  39. AddMovementInput(fwd, amount);
  40. }
  41. }
  42. void AAvatar::MoveBack(float amount)
  43. {
  44. if (Controller && amount)
  45. {
  46. // GetActorForwardVector()取得角色向
转自:http://www.52vr.com/article-562-1.html



2016-11-21 23:30:27 u013131744 阅读数 4619
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2392 人正在学习 去看看 杨石兴

首先要说的是,游戏开发是一项高度复杂的代码开发工作,编程语言只是最基本的知识,它涉及的内容还有计算机图形学、3D数学、物理学等复杂的学科。但是若需要学完这么多知识才能开发游戏,恐怕许多人都已经断气了,更谈不上开发游戏了。所以前人就把各种复杂的代码封装起来,使得一般的游戏开发者可以更加接近游戏的逻辑和功能性方面的代码,而无需接触最底层的知识。

194023hhhqhbpcqpmpltad

所以说游戏引擎,可以是引擎开发者已经写好的一堆代码框架,使得我们可以去调用这些底层代码,也可以是像虚幻4还附带可视化关卡编辑器的工具(Unity3D也是可视化的游戏引擎,后面会谈当今主流游戏引擎的对比)。

为什么选用虚幻4引擎?

首先,现在流行而且出名的商业引擎主要有cocos2dx,Unity3D,UE4,CryEngine等。但是这里选择UE4,也有笔者认为的独特优势。

1) UE4是开源的。开源就是代码是完全开放的,为什么开源如此重要?一方面是因为只有我们看到源代码的实现细节,当出错了我们才能快速准确地判断出错的成因,节省被错误折腾的时间。(你想想像Unity3D这种闭源引擎,要是出错了,你是完全看不到为什么会发生错误的。除了不断盲目Debug,查文档和谷歌之外自己对于错误束手无策。)另一方面,开源可以使得我们深入学习引擎的原理,只知其然不知其所以然必然不能走得太远,而且会走得更痛苦。

2) UE4的画质是世界上数一数二的。游戏的画质往往由游戏引擎来决定的,一个好的游戏引擎它可以模拟出极度逼真或者极具美感的画面。读者可以自己去看看Unity3D制作的游戏和UE4制作的游戏,其精美程度是相差甚远的。(这里并不是完全指责Unity3D,毕竟它们面对的是不同的层次。)作为一名追求极致的游戏程序员,当然要想看看最好的效果是怎么实现的。

3) UE4免费!无需多言,还有比免费更好的事吗?

下图为UE4游戏引擎制作出来的极度逼真游戏画面,你分得清这是不是现实吗?

虚幻4游戏引擎有何强大之处?

第一代虚幻游戏引擎(英文名是Unreal Engine,简写UE)在1998年由Epic Games公司发行。当时Epic Games公司为了适应游戏编程的特殊性需要而专门为虚幻系列游戏引擎创建了一种名为UnrealScript的编程语言,该语言让这个游戏引擎变得非常容易方便,因而这个游戏引擎开始名声大振。

接着,2002年,Epic发布了下一代游戏引擎UE2。这时候,在虚幻引擎提供的关卡编辑工具UnrealEd中,能够对物体的属性进行实时修改。它也支持了当时的次世代游戏机,像PlayStation2,XBox等。

到了2006年,Epic发布了下一代游戏引擎UE3,这可能是最受欢迎和广泛使用的游戏引擎。这时候的UE3又发布了一个极其重要的特性,那就是Kismet可视化脚本工具,Kismet工作的方式就是以用各种各样的节点来连接成一个逻辑流程图。其最牛逼的地方在于,使用Kismet你甚至不需要掌握任何编程知识。你可以借助Kismet使得不需要写一行代码来开发一个完整的游戏。 

到了2014年5月19日,Epic发布了Unreal4,目前最新也是Unreal4。这次版本换代也是有了巨大的改变,它已经完全移除了UnrealScript语言,并且用C++语言来代替它。在之前的版本,如果你想修改这个引擎来开发你自己的游戏,你必须用UnrealScript,也就意味着你要学习一门新的语言。不过现在,如果你要修改这个引擎,你可以用C++来完成。这对于绝大部分习惯于C++的游戏引擎工程师来说,使用自己热爱的C++语言来工作,绝对是一件天大的喜事啊。 

不但如此,游戏引擎的源代码已经可以从Github开源社区下载。这意味着开发者对游戏引擎有着绝对的控制权,实质上你可以修改任何任何东西,包括物理引擎、渲染和图形用户界面。 

它也提供了一些叫热更新的功能。什么叫热更新呢?通常,如果你想对游戏的代码进行一些修改,你必须要停止游戏才能进行修改,然后再次运行看看修改后游戏的效果。然而,使用热更新功能,你可以修改游戏而不需要停止或暂停游戏。任何在游戏代码的改变会即时更新,并且你可以看见它会在游戏中实时反映出来。 

UE4是跨平台的,你可以用来制作Xbox One、PlayStation4(包括索尼的Project Morpheus虚拟现实设备),Windows PC,Linux,Mac OSX,HTML5,iOS和安卓,就连虚拟现实设备Oculus Rift也支持。 

另一个重大的改变是,在2015年初,虚幻4已经可以完全免费下载和使用了,之前的版本是需要支付一定费用的。现在,你可以用来开发游戏,并且发行,而且不需要为UE4游戏引擎支付一分钱。只有在你赚到了3000美元收益之后,你才需要支付5%的技术使用费。 

另一个UE4提供的特性是商城,你可以在商城中购买和上传游戏资源。这些游戏资源可以包括动画,3D建模,材质,声音效果,预制游戏等等。这也是一个令没有游戏资源或者没有人力来开发资源的开发者振奋的消息。它们可以商场购买并直接应用于自己的游戏中。开发者也可以上传自己的工作成果到商城来赚钱。 

这个虚幻4小白系列教程,是面向于没有使用过UE4的新手,但需要一点点C++的知识(但也无需太多,一般读过任何一本C++教材都能看懂本教程)。我们从非常基础的下载安装引擎开始,到更高级的上传作品到谷歌PlayStore,都会涉及。我们会使用UE4来一步一步地制作我们的游戏,Let’s Start From it,你的游戏开发之路!

下图为UE4游戏引擎制作出来的官方示例宣传视频画面:



2016-11-22 13:34:10 u013131744 阅读数 2001
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2392 人正在学习 去看看 杨石兴

200800nnqmnb5bcb5xc2xt

接下来,我们将会创建一个放置我们的游戏角色的基本场景。

编译UE4编辑器

1) 现在,我们创建一个空白的UE4项目来开始。首先点击桌面的Epic Games Launcher,打开启动器,点击左上角的启动按钮。


2) 接着会运行创建项目的窗口。


接下来:
  • 点击“新建项目”。
  • 选择“C++”选项卡。
  • 然后从可用的项目列表中选择“基础代码”。
  • 在下方点击“...”按钮,设置你的项目位置,我这里是“D:\UE4 Projects”。
  • 接着填写项目名称,我这里是“Demo1”。
  • 点击“创建项目”按钮。

3) 然后UE4会自动打开VS 2015(Visual Studio 2015)编辑器。(注意因为虚幻4是用VS2013生成代码的,所以我们要使用VS2013以上版本的才能正常编译。另外一点是,项目路径和项目名称不要使用中文,否则也无法编译成功。)


4) 在如下图所示的下拉列表中选择Development Editor(开发编辑器)。


5) 按Ctrl+F5进行编译,然后就会运行UE4编辑器界面,如下图所示:

二. 添加物体到场景中

添加物体到场景中的方法很简单,只需要中内容浏览器中将物体拖放到视口中的场景。

1) 在内容浏览器中选择StarterContent文件夹,再选择Props子文件夹,将MaterialSphere拖放到场景中。


2) 按R键,当球体三个轴呈现一个立方体的时候,表示现在是缩放模式。可以通过点击拖动立方体来调整该物体大小。


3) 按F键,使得视口聚焦于球体。然后在StarterContent/Materials文件夹下,拖动M_Tech_Hex_Tile放置到球体中,就完成了材质的更换。什么是材质呢?材质的英文名是Material,是一种定义物体外观的方式,它就像画笔一样,只会影响物体的外表,而不会影响物体的物理属性。通过给球体换上不同的材质,你可以让球体看起来像玻璃球、像钢珠、甚至像纸球。


转自:http://www.52vr.com/article-559-1.html

2016-11-22 13:32:43 u013131744 阅读数 3867
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2392 人正在学习 去看看 杨石兴

195828yo4fo0j4svzbsmo8

虚幻4中有一些按键和快捷键很常用,牢记它们并运动到实际的项目开发中,将会大大地提高你的工作效率和使得工作更简便快捷。下面将列举它们出来:

按键 动作
鼠标左键 选择actor
鼠标左键+拖动 前后移动和左右旋转摄像头
鼠标右键 选择actor并打开右键菜单
鼠标右键+拖动 旋转摄像头方向
鼠标左键+鼠标右键+拖动 摄像头上下左右移动
鼠标中键+拖动 摄像头上下左右移动
滑轮向上 摄像机向前移动
滑轮向下 摄像机向后移动
F 聚焦选中的actor
箭头方向键 摄像机前后左右移动
W 选中平移工具
E 选中旋转工具
R 选中缩放工具
W+任何鼠标按键 摄像机向前移动
S+任何鼠标按键 摄像机向后移动
A+任何鼠标按键 摄像机向左移动
D+任何鼠标按键 摄像机向右移动
E+任何鼠标按键 摄相机向上移动
Q+任何鼠标按键 摄像机向下移动
Z+任何鼠标按键 增加视野(鼠标释放后会恢复原状)
C+任何鼠标按键 缩小视野(鼠标释放后会恢复原状)
Ctrl+S 保存场景
Ctrl+N 创建新场景
Ctrl+O 打开一个已有的场景
Ctrl+Alt+S 另存为新场景
Alt+鼠标左键+拖动 复制当前选中的actor
Alt+鼠标右键+拖动 摄像机前后移动
Alt+P 进入Play预览模式
Esc 退出预览模式
F11 进入仿真模式


转自:http://www.52vr.com/article-557-1.html

2016-11-22 13:28:18 u013131744 阅读数 6565
  • 从这里开始虚幻4-Editor介绍 v4.18

    本课程系列取名英译系列,是录制人员参考国外英文原版经典教程,结合中国人的习惯录制而成。希望能够给大家以帮助。从这里开始虚幻4系列教程,是Unreal的官方发布的入门教学,非常经典,是学习Unreal的佳入口。

    2392 人正在学习 去看看 杨石兴

193959y00hr0lcer20iljg

1) 进入虚幻4的官方主页(https://www.unrealengine.com/

这里你可以获得关于虚幻4的最新资讯,包括版本更新、博客更新、新闻和商城等。自2015年起,该引擎已经提供免费下载的服务。

除了UE4的官网主页,我也推荐你收藏如下网站:
2) 在官网主页,点击右上角的获得虚幻引擎。


3) 看到弹出一个登录界面,根据提示填写相关信息,然后勾选“我已经阅读并同意服务条款”,点击注册。然后登录进去。就会显示如下的界面,点击下载即可:


4) 下载并安装好后,打开桌面上的Epic Games Launcher图标。填写刚刚注册的帐号密码,点击登录。需要一定时间来启动,请稍等几分钟哦。


5) 登录后会看到如下图所示界面。然后点击“库”,再点击“添加版本”,你会看到最新版本的UE4。再点击“安装”,开始时需要等待几分钟,几分钟过后,程序会自动下载安装UE4。(注意,该步骤如果失败了可能需要翻墙)

6) 自动安装好后,点击左上角的“启动”。


7) 大功告成!

 


转自:http://www.52vr.com/article-553-1.html

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