接着上节我们继续学习,现在我们来创建一些NPC(non-playable characters,非玩家角色)。在这个游戏中,当我们靠近NPC时,它们会做出相应的反应。

一 创建C++类

1) 在UE编辑器中,打开文件-新建C++类,选择从Character(角色)类继承,然后命名子类为NPC。

2) 编写代码。打开NPC.h文件:
添加头文件:(注意包含头文件必须在#include "NPC.generated.h"这一行前面加)

#include "UObjectGlobals.h"

在原来的代码基础上添加如下代码:

public:
//在目录Collision下创建球体属性(随处可见,蓝图只读),该属性用作碰撞体
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Collision) USphereComponent* ProxSphere;
//在目录NPCMessage下创建字符串属性(随处可见,蓝图可读写)
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = NPCMessage) FString NpcMessage;

说明:FString是UE4的专用字符串类型,当你在UE4中开发游戏中,应该优先使用FString而不是STL里面的String。因为UE4的FString等内置类型保证了跨平台功能。

3) 重新编译UE4项目。

二 创建蓝图类

1) 在内容浏览器,右击NPC类,然后从这里创建一个蓝图类。注意给每个蓝图类都命名一个独有的名字,因为之后我们给不同的NPC赋予不同的模型网格和不同的消息。

2) 现在打开蓝图编辑器,选择从添加组件中选择Mesh网格,然后在细节面板更改Skeletal Mesh(骨骼网格)为SK_Mannequin。

3) 像之前一样调整胶囊碰撞体到适合位置。

4) 在组件面板中选择蓝图自身。然后在默认选项卡,找到NpcMessage属性。这是从我们C++代码中创建的属性并且可以在蓝图中应用。在UPROPERTY()函数里面添加了一个NpcMessage的字符串变量,并且指定了在蓝图类中可读写,所以在细节面板中可以进行编辑了。

5) 你可以继续创建一个NPC蓝图类(或者直接从原来的NPC蓝图类中复制一个新的蓝图类),并且可以分别设置不同的NPCMessage。接着将这两个蓝图类拖动到场景中。

接下来我们讲解如何将每个NPC自身的消息在游戏中显示给玩家看。

三 UE4创建平视显示器(HUD)

为了展示对话框,我们需要自定义一个HUD(heads-up display,即平视显示器)。

什么是HUD?
HUD是平面显示界面,就是平时我们玩3D游戏提供给玩家的2D菜单界面。HUD类提供了渲染文字、贴图、矩形和材质的渲染,创建后也可以通过蓝图来编辑。

创建HUD子类

1) 点击文件-新建C++类;(简单的步骤我们就不再截图了,相信大家也都知道怎么操作了)

2) 选择从HUD类继承来创建我们自己的类;

3) 给你的类命名,在我这里命名为MyHUD。创建好后就会自动打开VS开发环境。

在VS编辑代码

在MyHUD.h中里面添加如下代码:

UCLASS()
class MYFIRSTCODE_API AMyHUD : public AHUD
{
	GENERATED_BODY()
public:
	// 添加字体属性(随后我们在蓝图编辑器中设置字体类型)
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = HUDFont) UFont* hudFont;
	// 下面这个重载函数每帧会被调用一次,在这个函数的定义里面来渲染字体
	virtual void DrawHUD() override;
};

在MyHUD.cpp中添加如下代码:

void AMyHUD::DrawHUD()
{
	// 先调用父类DrawHUD()函数
	Super::DrawHUD();
	// 接下来就渲染东西
	// 下面是画一条从(200,300)到(400,500)的蓝线:
	DrawLine(200, 300, 400, 500, FLinearColor::Blue);
	// 下面写一行文字(参数分别为文字、位置、字体、缩放、颜色):
	DrawText("UE4 is very interesting!", FVector2D(0, 0), hudFont, FVector2D(1, 1), FColor::White);
}

四 在蓝图编辑器设置字体

1) 点击工具栏的蓝图-游戏模式-HUD:HUD-创建-MyHUD,来创建一个蓝图类,名字改为BP_MyHUD。

2) 在右侧的细节面板中选择字体:

3) 保存退出,然后打开之前创建的游戏模式的蓝图类:

4) 在HUD class中选择BP_MyHUD作为我们的默认HUD。

最后,你可以运行来看看HUD的效果:

未完待续

3D游戏开发之在UE4中创建非玩家角色(NPC)的更多相关文章

  1. 游戏开发之在UE4中编写C++代码控制角色

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

  2. 3D游戏开发之UE4中的集合:TSet容器

    好久没有更新了,最近一直在老家过年,网络不通的,今天才有时间更新一集. 一.TSet<T>是什么 UE4中,除了TArray动态数组外,还提供了各种各样的模板容器.这一节,我们就介绍集合容 ...

  3. Unity3D游戏开发之C#编程中常见数据结构的比较

    一.前言 Unity3D是如今最火爆的游戏开发引擎,它可以让我们能轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型的互动内容.它支持2D/3D游戏开发,据不完全统计,目前国内80%的手机游戏都 ...

  4. Unity3D游戏开发之在Unity3D中视频播放功能的实现

    版权声明:欢迎订阅公众号[5厘米的理想],愿生命里的每个小理想,都能成为生命里的小确幸.本文地址为: https://blog.csdn.net/qinyuanpei/article/details/ ...

  5. [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)

    ---------------------------------------------------------------------------------------------------- ...

  6. Cocos2d-x 3.x游戏开发之旅

    Cocos2d-x 3.x游戏开发之旅 钟迪龙 著   ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...

  7. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  8. [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新全然解读

    ---------------------------------------------------------------------------------------------------- ...

  9. iOS游戏开发之UIDynamic

    iOS游戏开发之UIDynamic 简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 ...

随机推荐

  1. 关于python 函数参数

    函数参数:必选参数.默认参数.可选参数.关键字参数 1.默认参数 默认参数可以简化函数的调用.设置默认参数时,有几点要注意: 一是必选参数在前,默认参数在后,否则Python的解释器会报错: 二是如何 ...

  2. Codeforces#373 Div2

    Ranting重新回到浅蓝的一场比赛 Problem A 题意:月亮的大小是按照这样的顺序排列的0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ...

  3. (简单) CF 44D Hyperdrive,数学。

    In a far away galaxy there are n inhabited planets, numbered with numbers from 1 to n. They are loca ...

  4. 第五弹:VGG

    接下来讲一个目前经常被用到的模型,来自牛津大学的VGG,该网络目前还有很多改进版本,这里只讲一下最初的模型,分别从论文解析和模型理解两部分组成. 一.论文解析 一:摘要 -- 从Alex-net发展而 ...

  5. tt程序分析(一)

    首先是loginactivity login成功以后,跳转到mainActivity. mainActivity中有四个fragment , 聊天        fragment_chat 通讯录   ...

  6. redhat7 常用命令

    关闭防火墙 systemctl stop firewalld 查看防火墙状态 systemctl status firewalld 永久关闭防火墙命令.重启后,防火墙不会自动启动.systemctl ...

  7. mysql show命令

    MySQL中有很多的基本命令,show命令也是其中之一,在很多使用者中对show命令的使用还容易产生混淆,本文汇集了show命令的众多用法. 1. show tables或show tables fr ...

  8. 502 Bad Gateway(Nginx) 查看nginx日志有如下内容

    2016/09/01 09:49:41 [error] 79464#79464: *3 user "nagios" was not found in "/usr/loca ...

  9. ubuntu12.04+fuerte 下跑通lsd-slam——使用usb摄像头

    上一篇介绍了如何使用数据集跑lsd-slam,这篇介绍如何用一个普通的usb摄像头跑lsd-slam,默认ubuntu12.04,fuerte已经安装好,workspace也已设置,如果没有,请参考上 ...

  10. uCOS-iii 中定义的一些常量

    uCOS-iii 中定义的一些常量 uCOS-iii 中有许多宏定义的量,这些量不需要全部记住是什么意思,因为在阅读代码的时候可以选中变量或宏定义然后右键查看定义,就可以知道它代表的什么意思.但是如果 ...