UE4添加人物模型

在正式使用 UE4 添加人物模型之前,我们先来解释几个概念。

什么是组件

在添加人物模型之前先介绍一个概念叫“组件”,组件是什么呢?组件的作用是为了让 Actor 实现一个功能,比如说:我们现在的角色,没有模型,我们需要一个模型那怎么办呢?那么我就要在 Character 身上挂一个“骨骼模型组件”,比如说我想要我的摄像机远离我的人物实现一个上帝视角那要怎么做呢?那么我们可以在Character的身上挂一个摄像机组件。

什么是 Actor

Actor 是 UE4 里面的 “可放置物品”,我们在 UE4 游戏窗口中所看到的场景、灯光、角色、模型,它们的父类都是 Actor。

什么是Character

Character 是 Actor 的一个子类,Character 封装了 移动组件 ,让 Character 类有了移动的功能。

添加人物模型

通过上面的介绍,我们已经知道需要通过添加组件来添加人物模型。那么我们要如何在 cpp 里面添加组件呢?

  1. 首先打开 VS 编辑器,在 APlayingCharacter.h 文件尾部下入以下代码:
//这个是骨骼模型组件
USkeletalMeshComponent* MeshComponent = nullptr;
//这个是骨骼模型
USkeletalMesh* SkeletalMesh = nullptr;

上面就是声明组件的格式。USkeletalMeshComponent 是组件的类型,贴心的 UE4 其实已经在父类帮我们创建好了 USkeletalMeshComponent,我这里只是演示如何添加一个组件。删掉USkeletalMeshComponent* MeshComponent = nullptr,我们来到构造函数去注册我们的骨骼模型 USkeletalMesh。

  1. 首先我们把构造函数里面的PrimaryActorTick.bCanEverTick = true;删掉,然后把virtual void Tick(float DeltaTime) override函数删掉,这个是开启帧事件和实现帧事件的函数,这个帧事件非常损耗性能,因为它是每帧执行一次的,我们不需要。

然后我们输入以下代码:

APlayingCharacter::APlayingCharacter()
{//注册组件SkeletalMesh = CreateDefaultSubobject<USkeletalMesh>(TEXT("SkeletalMesh"));
}

这里我注册了一个骨骼模型。注意,SkeletalMesh 是骨骼模型,不是骨骼模型组件,但是它还是一个组件,我们需要把这个骨骼模型添加到骨骼模型组件里面去,它们是配套的。

注意:CreateDefaultSubobject 只能用在构造函数里面,在构造函数其他地方使用的话会崩溃。

  1. 下载资源,资源地址:https://pan.baidu.com/s/1DAHTpgZglW59660jZbK2iQ 提取码:43wd

我先下载这两个资源,这两个资源是人物的模型资源,下载好了之后我们把这两个文件夹复制到你的 UE4 保管库目录,保管库目录可以在 UE4 的启动器里面查看。

然后点击“编辑保管库缓存位置”, 会出现一个路径:

把这两个文件放在 Launcher/VaultCache/ 目录下:

放好了之后,重新启动UE4启动器,然后我们回到 UE4 启动器,点击库:

我们会发现我们刚刚复制的两个文件夹出现在了我们保管库里面。我们这里使用 TwinSwordAnimsetBase 资源,点击添加到工程。

首先,由于这两个资源比较旧,所以会显示没有匹配的工程。我们先点击所有工程,然后点击我们的项目,选择最近的版本,然后点击添加到工程。

回到 UE4 编辑器,我们会发现我们的资源窗口已经有了我们刚刚添加的文件夹:

4.双击打开这个文件,依次进入 UE4_Mannequin 文件夹和 Mesh 文件夹,我们会看到有三个资源,其中 SK_Mannequin 就是我们的骨骼模型资源,我们单击选中这个资源然后 按Ctrl+C 获取这个资源的路径。

  1. 回到VS编辑器,我们在 APlayingCharacter 文件的构造函数写入以下代码:
//加载模型
SkeletalMesh = LoadObject<USkeletalMesh>(NULL,TEXT("SkeletalMesh'/Game/TwinSwordAnimsetBase/UE4_Mannequin/Mesh/SK_Mannequin.SK_Mannequin'"));

LoadObject 用来动态加载对象资源,它可以用在任何地方。这里我们第二个参数传入的是一个路径,这个路径是我们模型的路径,我们直接Ctrl+V就可以获取这个资源的路径。

  1. 我们使用 GetMesh() 来设置模型,在构造函数中继续下入以下代码:
//把我们的模型赋值到模型组件
GetMesh()->SetSkeletalMesh(SkeletalMesh);

GetMehsh() 其实就是 SkeletalMeshComponente 骨骼模型组件,然后通过 SetSkeletalMesh() 函数去添加我们刚刚加载的模型。

  1. 编译之后,回到编辑器点击 play,发现我们的人物已经添加到屏幕上。

UE4添加人物摄像机

在这一节中,我们需要添加两个组件分别是摄像机弹簧臂组件和摄像机组件。

摄像机弹簧臂组件

摄像机弹簧臂组件,可以想象成是我们的手臂和手。手拿着摄像机,当我们想移动摄像机的时候,我们移动的是我们的手臂而不是摄像机。

  1. 打开VS编辑器,在PlayingCharacter.h文件添加摄像机弹簧组件和摄像机组件。
//摄像机弹簧臂组件
class USpringArmComponent* SpringArmComponent;
//摄像机组件
class UCameraComponent* CameraComponent;
  1. 在CPP文件中,添加两个头文件和在构造函数中注册这两个组件。
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
//注册摄像机手臂组件
SpringArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComponent"));
//把这个组件绑定到根组件
SpringArmComponent->SetupAttachment(RootComponent);
//设置摄像机手臂和根组件之间的距离
SpringArmComponent->TargetArmLength = 300.0f;
//我们使用模型组件去进行旋转,如果不设置设个的话,Pitch轴无法进行视角移动
SpringArmComponent->bUsePawnControlRotation = true;
//注册摄像机组件
CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("CaameraComponent"));
//把摄像机绑定到摄像机手臂上
CameraComponent->SetupAttachment(SpringArmComponent);
  1. 由于我们的骨骼模型生成的时候它的位置和旋转是不对的,所以我们要设置一下我们骨骼模型的位置和旋转。
//设置模型位置,这里我们把人物以Z轴移动了90个单位,也就向下移动了90个单位
GetMesh()->SetRelativeLocation(FVector(0,0,-90));
//设置模型面朝方向
GetMesh()->SetRelativeRotation(FRotator(0, -90,0));

编译一下,回到编辑器中,发现我们的摄像机已经添加了进去。

完整代码如下。

  1. PlayingCharacter.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "PlayingCharacter.generated.h"
UCLASS()
class GAMEPROJECT_API APlayingCharacter : public ACharacter
{GENERATED_BODY()
public:// Sets default values for this character's propertiesAPlayingCharacter();
protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;
public:// Called to bind functionality to inputvirtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;void MoveForward(float val);  //人物往前移动void MoveBack(float val);  //人物向后void MoveRight(float val);  //人物向右void MoveLeft(float val);  //人物向左//跳跃开始void JumpStart();//跳跃结束void JumpEnd();
private://这个是骨骼模型USkeletalMesh* SkeletalMesh = nullptr;//摄像机弹簧臂组件class USpringArmComponent* SpringArmComponent;//摄像机组件class UCameraComponent* CameraComponent;
};
  1. PlayingCharacter.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "PlayingCharacter.h"
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
// Sets default values
APlayingCharacter::APlayingCharacter()
{SkeletalMesh = CreateDefaultSubobject<USkeletalMesh>(TEXT("SkeletalMesh"));//加载模型SkeletalMesh = LoadObject<USkeletalMesh>(NULL,TEXT("SkeletalMesh'/Game/TwinSwordAnimsetBase/UE4_Mannequin/Mesh/SK_Mannequin.SK_Mannequin'"));//把我们的模型赋值到模型组件GetMesh()->SetSkeletalMesh(SkeletalMesh);//设置模型位置GetMesh()->SetRelativeLocation(FVector(0,0,-90));//设置模型面朝方向GetMesh()->SetRelativeRotation(FRotator(0, -90,0));//注册摄像机手臂组件SpringArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComponent"));   //把这个组件绑定到根组件SpringArmComponent->SetupAttachment(RootComponent);               //设置摄像机手臂和根组件之间的距离SpringArmComponent->TargetArmLength = 300.0f;//我们使用模型组件去进行旋转,如果不设置设个的话,Pitch轴无法进行视角移动SpringArmComponent->bUsePawnControlRotation = true;//注册摄像机组件CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("CaameraComponent"));//把摄像机绑定到摄像机手臂上CameraComponent->SetupAttachment(SpringArmComponent);
}

UE4开发五:人物模型和摄像机相关推荐

  1. UE4 SceneCapture2D显示人物模型时过滤背景颜色或天空盒

    游戏有时候需要把人物显示到UI上,会需要用到RT.这里不是具体教程,具体教程可以找其他的资料.是因为我自己在做的时候遇到需要去除天空盒的问题,然后又没搜索到解决方法.这里把我解决的方法分享出来. ES ...

  2. 【Visual C++】游戏开发五十一 浅墨DirectX教程十九 网格模型进阶之路

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8770426 作者:毛星云(浅墨 ...

  3. ue4小白人骨骼定义_【Blender】用SkinModifier+骨骼顶点“灵活”快速创建雕刻需要用的基本人物模型...

    [导图] 一.创建Plane并将四个顶点压缩为一个顶点 Shift+A Cube Tab Edit Mode Alt+M Merge At Center,以将四个顶点变为一个顶点 二.挤出顶点产生基本 ...

  4. unity3D女性人物模型 适合用于游戏开发的素材

    unity3D女性人物模型 适合用于游戏开发的素材 下载链接: https://download.csdn.net/download/weixin_43474701/59656815

  5. UE4导入人物模型后,材质没有对应的材质插槽,导致材质贴图混乱,的解决办法

    刚用blender做完一个模型,还没来得及绑骨就先导到UE4里看看,结果一看材质没有贴到人物上,我的十几个材质,ue4只自动给我识别了几个材质到人物模型上. 一开始还以为是我的模型合并的时候材质会损失 ...

  6. 【unity游戏开发教程】Unity+Umotion Pro+VRoid+Blender制作人物模型和动画,在unity中简单制作二次元人物动画

    前言 大家好!本期教程教大家在unity中制作二次元人物模型和动画 文章目录 前言 0.环境准备 1.下载VRoid Studio 2.Umotion Pro下载 3.Mixamo网站 4.blend ...

  7. 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第五节:模型的加载与渲染

    <使用Cocos2d-x 开发3D游戏>系列在线课程 第五节:模型的加载与渲染. 视频地址:http://edu.csdn.net/course/detail/1330/20805?aut ...

  8. 【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)

    这是答应大家的讲解骨骼动画的文章的N部曲的第二篇.这篇文章里,我们对现行的三种模型动画技术进行了概述,然后对X文件构成进行了详细的剖析,最后放出了骨骼动画的第一个示例程序,载入了<诛仙>中 ...

  9. 【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8832812 作者:毛星云(浅墨 ...

  10. 【Visual C++】游戏开发五十四 浅墨DirectX教程二十一 视觉的诡计 公告板 Billboard 技术

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

最新文章

  1. 电信系统方案 电信综合营帐系统
  2. 牛客题霸 NC26 括号生成
  3. Codeforces Round #379 (Div. 2) E. Anton and Tree
  4. html 页面跳转 中文传值,两html页面之间的传值,并解决中文乱码问题
  5. 浅说机器学习中“迭代法”
  6. 谷歌浏览器如何抓取grpc_前5名:Google分享gRPC,更好的开源UX等
  7. 华为云网络测量如何“悬丝诊脉”
  8. 大连市打造数字人民币应用示范村
  9. 4-5 求自定类型元素的最大值 (10分)
  10. 华硕主板开机:loading asus express gate解决办法
  11. 一个例子理解java面向对象的机制
  12. 阿里云ECS服务器配置Web项目和FTP Server
  13. 信息系统项目管理师考试难?一次过备考经验分享给大家
  14. 电脑计算机配置应用程序兼容性,电脑怎么打开兼容模式怎么办
  15. 【板栗糖GIS】如何给文件夹批量重命名
  16. 单片机led灯闪烁实验总结_项目二 LED灯闪烁设计实现
  17. 说说我出道后的处女作:剪贴板神器 iPaste
  18. Eclipse中将package,folder,source folder相互转换
  19. 网站上传服务器浏览器打不开,网站发布或自己上传程序后,网站打不开的原因有哪些?...
  20. 超链接 与众不同的鼠标滑过超链接下划线动画效果

热门文章

  1. Backtrader策略实现(一) | 简单双均线
  2. VRF-Virtual Routing Forwarding
  3. yigo基础学习笔记2
  4. 店盈通:拼多多推广技巧步骤
  5. centos6系统下载--国内镜像站点
  6. wlan 网速测试软件,wifi网速测试-让你一键查看当前网络状态的wifi网络测速工具...
  7. layim手机版嵌入app
  8. STM32MP157C-DK2 开机测试
  9. 微信APP退款功能开发
  10. 内涵段子计算机说唱id,2018中国互联网哈哈榜之2:十大网络流行语