游戏开发之UE4添加角色到场景中
接着上次继续学习,现在我们已经有了一个场景并且运行了,我们需要添加一个角色到场景中。要这样做,我们必须从UE4的GameFramework类继承它。
一. 创建一个从Character类继承的类
从基本框架类继承是很简单的:
1) 在项目中打开你的UE4编辑器。
2) 在文件,选择“新建C++类”。
3) 这里你可以选择从Pawn类(Pawn类从控制器接收输入)继承或从Actor类继承。不过我们可以这里选择从Character类(角色)继承。
4) 点击继续,然后你可以命名这个类。这里我们将其命名为Avatar。
5) 最后点击创建类来使用代码创建这个类。
6) 然后UE4会自动运行你的VS项目。我们在项目解决方案中打开Avatar.h文件:
Avatar.h是这样的:
// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "GameFramework/Character.h" #include "Avatar.generated.h" UCLASS() class MYFIRSTCODE_API AAvatar : public ACharacter { GENERATED_BODY() public: // Sets default values for this character's properties AAvatar(); // Called when the game starts or when spawned virtual void BeginPlay() override; // Called every frame virtual void Tick( float DeltaSeconds ) override; // Called to bind functionality to input virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; };
UCLASS()和GENERATED_UCLASS_BODY()都是UE4定义好的宏,UCLASS()宏使得你的C++代码在UE4编辑器中可用。GENERATED_UCLASS_BODY()会适当处理你的类函数成为一个UE4类。现在你不需要彻彻底底地搞清楚它们的工作原理,你只需要确保它们在正确的位置出现。
二. 为角色创建一个模型
现在我们avatar是继承了角色类,但是还需要给角色赋予一个模型。我们可以从UE4的商城找免费的模型,步骤如下:
1) 点击工具栏的市场,进入UE4的商城。
2) 在类别中选择角色,找到一个名字叫Animation Starter Pack的免费资源包,点击进去。
4) 点击下图中的免费按钮添加到库里面。(可能加载有点慢,耐心等待,我加载了几分钟呢)
5) 下载完后点击库,点击“添加到工程”。
6) 在新窗口中,选择Demo1,然后点击添加到项目。
7) 现在,我们可以找到刚才添加的资源,在内容浏览器点击选择路径:
8) 选择AnimStarterPack文件夹:
三 在运行时改变载入的资源
载入网格通常情况下,如果使用C++代码来指定要载入的资源,这是一种硬编码的坏习惯。在运行程序的时候,如果资源发生了改变,则程序不会做出改变。更好的做法是,可以在运行时改变载入的资源。
下面我们从C++类中创建一个蓝图:
1) 在菜单栏中的窗口-开发者工具-类别查看器。
2) 在类别查看器中,右击Avatar,选择创建蓝图类。(如果找不到Avatar,请关闭UE4编辑器,再重新打开)
3) 在下方输入蓝图类名称(我这里是BP_Avatar),点击保存。然后会来到蓝图编辑器:
4) 在左上角的组件窗口中,选择Mesh:
5) 在右侧的细节面板中,在Mesh选项卡中,选择下拉按钮,然后点击视图选项,点击显示引擎内容,再选择TutorialTPP。
6) 这时候碰撞体看起来是这样的,模型和碰撞体是对不上的:
7) 然后我们通过W、E、R快捷键变换模型,使之近似地包围在碰撞体里面。如果碰撞胶囊体不够大,你可以点击组件的CapsuleComponent,然后在细节面板的Shape调节胶囊体大小:
8) 然后我们可以关闭窗口。在内容浏览器中将BP_Avatar拖放到场景中。
四 添加动画动作
添加动画你可以看到人物模型是呈T型的,3D建模/动画师通常都会让人物默认状态下摆T型,因为此时这可以使得人物做出各种各样的动作。
1) 双击内容浏览器的BP_Avatar,重新打开蓝图编辑器。
2) 在上方选项卡中点击视口,然后选择Mesh,在右侧的细节面板中的Animation选项中的Anim Blueprint Generated Class中选择UE4ASP_Hero_AnimBlueprint。
这样就完成了一个模型的动画添加了,关于动画的更多细节,我们在后面的教程中会深入探讨。
五 添加摄像机
为了使得我们有一个第三人称视角,我们给该角色添加上摄像机以追随该角色。
1) 在组件中进行如下的步骤:
2) 移动摄像机并旋转角色到如下状态(注意角色的蓝色箭头是角色的前进方向,所以要使得摄像机和角色自身的朝向都要面对着蓝色箭头):
3) 点击工具栏的保存。
现在的角色还不能被控制,我们下一节继续讲如何编写C++代码来控制角色。
游戏开发之UE4添加角色到场景中的更多相关文章
- 3D游戏开发之UE4中的集合:TSet容器
好久没有更新了,最近一直在老家过年,网络不通的,今天才有时间更新一集. 一.TSet<T>是什么 UE4中,除了TArray动态数组外,还提供了各种各样的模板容器.这一节,我们就介绍集合容 ...
- Cocos2d-x 3.x游戏开发之旅
Cocos2d-x 3.x游戏开发之旅 钟迪龙 著 ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...
- [整理]Unity3D游戏开发之Lua
原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新全然解读
---------------------------------------------------------------------------------------------------- ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)
---------------------------------------------------------------------------------------------------- ...
- iOS游戏开发之UIDynamic
iOS游戏开发之UIDynamic 简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 ...
- [Unity3D]Unity3D游戏开发之从Unity3D到Eclipse
---------------------------------------------------------------------------------------------------- ...
- 【转载】浅谈游戏开发之2D手游工具
浅谈游戏开发之2D手游工具 来源:http://www.gameres.com/459713.html 游戏程序 平台类型: iOS Android 程序设计: 其它 编程语言: 引擎/SDK ...
- Cocos2d—X游戏开发之CCToggle(菜单标签切换)CCControlSwitch(开关切换)
Cocos2d—X游戏开发之CCToggle(菜单标签切换) 首先继承子CCMenu,是菜单标签中的一种.‘ class CC_DLL CCMenuItemToggle : public CCMenu ...
随机推荐
- Python中super的用法
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).重复调用(钻石继承)等种种问题.总之前人留下的经验就是:保持一致性 ...
- Keil 二进制数输入宏
源:http://hi.baidu.com/skystalker/item/e7679cd79c6f751220e250c1?qq-pf-to=pcqq.c2c 在C语言中有十进制,十六进制,八进制; ...
- (中等) HDU 2295 , DLX+重复覆盖+二分。
Description N cities of the Java Kingdom need to be covered by radars for being in a state of war. S ...
- [iOS Animation]-CALayer 变换
变换 很不幸,没人能告诉你母体是什么,你只能自己体会 -- 骇客帝国 在第四章“可视效果”中,我们研究了一些增强图层和它的内容显示效果的一些技术,在这一章中,我们将要研究可以用来对图层旋转,摆放或者扭 ...
- 改变tabBarItem颜色
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UICol ...
- Map笔记
Map,是一个接口,是以键值对的方式存储的,并且键是无序且不可重复的.Map和Collection没有什么关系,Map是一对一对的存,而Collection是一个一个的存. 下面有一个子接口:Sort ...
- 数据库 Mysql事务详解
Mysql事务 mysql的事务默认是自动提交的,也就是你提交一个query,他就直接执行!我们可以通过 禁止自动提交 开启自动提交 //mysql事务 #include <stdio.h> ...
- org.springframework.data.mapping.PropertyReferenceException: No property created found for type
错误原因:org.springframework.data.domain.SortSort sort=new Sort(Sort.Direction.DESC,"created_time&q ...
- zend framework 配置连接数据库
Zend_Db_Adapter是zend frmaeword的数据库抽象层api.基于pdo, 你可以使用Zend_Db_Adapter连接和处理多种 数据库,包括:microsoft SQL ...
- tap是什么意思
分光是数据通过光纤传输:分路是数据通过网线传输.粗浅的说,Tap的概念类似于“三通”的意思,即原来的流量正常通行,同时分一股出来供监测设备分析使用. 其实这只是最简单的Tap的概念,目前的技术发展已经 ...