3D游戏开发之在UE4中创建非玩家角色(NPC)
接着上节我们继续学习,现在我们来创建一些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的效果:
未完待续
- IntelliJ IDEA 17和Maven构建javaWeb项目
- spring-boot 速成(2) devtools之热部署及LiveReload
- spring-boot 速成(2) devtools之热部署及LiveReload
- 使用git提交项目
- JavaScript中的内置对象--Number对象
- 自动驾驶落地,究竟被什么绑住了脚?
- JDBC(三)数据库连接池(DBCP、C3P0)
- Single Page Application概览
- HashSet集合中hashCode及equals方法详解
- 企鹅智造企业发展论坛:共话小程序生态下的企业营销
- MySQL(十六)之MySQL用户管理
- JavaScript中this关键字使用
- thrift:swift项目笔记
- Java常用类(五)之集合工具类Collections
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- STM32硬核DIY机械键盘|蓝牙USB双模|灯控
- R语言隐马尔可夫模型HMM识别不断变化的股票市场条件
- 看完这篇并发后,又能扯皮了?
- Twitter美国航空公司情绪数据集的监督或半监督ULMFit模型
- 一文帮你理解整个 SRE 运维体系!
- 拆解式解读如何用飞桨复现胶囊神经网络(Capsule Network)
- 我用飞桨Parakeet合成小姐姐声音帮我“读”论文
- 【5分钟玩转Lighthouse】搭建WordPress博客
- vue接入腾讯地图(一)【点击事件】
- Redis文件事件&时间事件处理机制
- Redis持久化策略
- Redis二进制安全的原理
- 面试必备 Vue 知识点
- 数据传输 | mysqldiff/mysqldbcompare 实现 DTLE 自动化测试
- CPU有个禁区,内核权限也无法进入!