UE4“将旋转朝向运动”、人物蓝图springarm的细节面板中“相机设置——使用pawn控制旋转、类默认值中pawn的旋转属性:三者间的辨认

本文介绍了作者在学习虚幻4(UE4)过程中对pawn旋转设置的研究,包括“将旋转朝向运动”、人物蓝图springarm的相机设置以及类默认值中的pawn旋转属性。通过实验,作者探讨了pawn的旋转行为以及与角色移动、鼠标输入的关系,揭示了pawn并非仅限于人物模型,而是一个无形的控制对象。实验结果显示,pawn的旋转属性设定仅限制旋转方向,而非是否允许旋转。

我是个非常喜欢虚幻4的小白,只是想分享一些我在学习虚幻4中的一些心得和对专有名词的个性化理解,鄙人不才,虽然实现了“目标偏移”和“人物静止时看得到脸,运动时看不到脸”的功能,不过还只停留在记忆层面。我是很想知道原理的人,所以思考过后,决定从整个“旋转”方面入手,这两天就被标题中的三个设定所困扰。

核心问题就是pawn到底该如何理解,它到底是个什么东西,我用了组控制变量实验,在文末我会阐明实验的准备工作并放上最能指明pawn的两个实验,喜欢的就鼓励鼓励,哪里错了也请指正。

为了方便我自己或者是各位读者理解,先放三个设定界面的图:

摄像机设置:人物蓝图——springarm细节面板——摄像机设置。

四项全打勾,使得摄像机能够在空间内移动。

人物蓝图——character movement——角色移动(旋转设置)

 

 

 

将“将旋转朝向运动”打勾,使得角色的旋转与运动方向一致,教程上说是“角色朝向只与键盘有关”

人物蓝图—类默认值—pawn

 

 

 

 

 

 

使用控制器旋转yaw打勾。

补充:pitch:以Y为轴体旋转,yaw:以Z为轴体旋转:roll:以X为轴体。

根据上三图,不难发现一个共有的,最常被使用的东西——pawn。我不放官方解释,发表一下我经过不断实验得出的个人见解。不过在这之前,先看一个UE4中封装好的用来获取鼠标运动并输出轴值给“pawn”的函数。(“pitch”可以替换为‘yaw’或者‘roll’)

 

 

 

此函数的作用是获取鼠标的运动方向及缩放比例,并输出以“??”轴旋转的轴值给其指向的对象“pawn”

何为鼠标的运动方向及缩放比例?——设置——项目设置——引擎——输入——绑定——在两个轴映射中根据自己的选择自定义全局事件,并在事件的字框中选择按那个控制键触发。

在此举例:

 

鼠标X:你横向移动鼠标

缩放1.0:首先,他有正负值,正为右左为负。1.0的意思:引擎中实际操作次数与你手工操作次数的比例

回到pawn:pawn的汉语翻译是“棋子”——被利用的人,主要意思是能被控制,但不是控制器。在这里的功能中,就有一个特殊的pawn——character,虽然character有角色的意思,但这并不意味着pawn就是等于人物模型“actor”

即character属于pawn不等于actor。

那pawn到底是个什么东西呢?其实是无形的,我们可以做这样一个实验,首先你得编写好如下蓝图:

都在人物蓝图里

 

 

 

 

 

 

视角的上下左右可以跟随鼠标走向的基础蓝图——是个必要不充分条件

 

 

 

 

 

 

 

 

是为了实现“禁止时可以看到角色的脸,运动是看不到”但在这里我们只是借用其后半部分的设置变量的功能。即——————

类默认值的pawn属性中roll pitch yaw旋转是否可用和character movement细节面板中的角色移动(旋转设置)中的将旋转朝向运动是否可用。

但必须联合人物蓝图中的相机设置

你们可以根据自己的实验方法手动勾选或取消这三样及其子变量,从大串“控制变量”的实验中得到自己想证明的东西。

我要洗澡去了,这里直接放上最能说明pawn的实验,我先声明一个假设:类默认值中pawn的旋转属性这栏,使用控制器旋转“pitch”、“yaw”、“roll”这些选项只是限制pawn的旋转方向,而非确定pawn能否旋转。

第一步:三个板块的变量全部设false,即不打勾。

第二步,在蓝图中添加函数“获取控制旋转”会有行小字,目标是pawn,然后从“returne value”拉出引线添加“拆分旋转体“然后将Z拉出提升为变量(为什么是Z?因为你的鼠标在以Z为轴的平面上),最后添加”打印文本“,如图所示:

 

 

 

 

 

 

切记连接执行引脚,可以在前方添加”事件tick“即每一帧都执行。

然后运行,你会发现,你视角无法变化,但是随着鼠标的移动,有些数据一直在疯狂的变化:

 

 

 

 

 

 

 

 

 

 

 

 

数据不断变化,并可察觉这是个以Z为轴的旋转变化,因为数据是-360~360。如果诸位读者也在做实验,不妨试着一边用键盘操控人物,一边疯狂移动鼠标(前提是你已编写好相关事件蓝图)你会发现一个很奇怪的现象——在按住向前的按钮没有按其他按钮的情况下,随着鼠标的移动,人物会朝着不同方向移动,注意!!这个朝着不同方向不是脸朝着不同方向!!——对于这个以后再做探究。

根据实验结果以及我们刚刚编写的第三个含有”打印文本“封装函数的蓝图可知,这些数据是由pawn的旋转引起的,也就是由鼠标控制引起的,所以得出:类默认值的“pawn”旋转属性只是对其依照哪一轴旋转进行设定,并不是设定他是否能旋转。无论如何,只要你对pawn进行了值得更新,他就会旋转

第二个实验:得出的视觉效果就是浏览模型

第一步:将人物蓝图中类默认值的三个旋转值全打勾,

第二步:运行

你就在浏览模型了。如图:

 

 

 

 

 

 

 

 

 

 

 

 

也许你会说,为什么左右不行,我是这样理解的:鼠标怎么立体呀?

根据两个实验,我认为人物actor中的pawn其实就是actor脚底下与其相连的一个无形的东西,让人误以为pawn=actor的原因是

这个东西与人物一体控制着人物的旋转,只要那个封装函数在,不管默认值可不可用,pawn一直在旋的转,最后一句是最重要

我还会继续深入研究,也请大佬们用自己的理解方式纠正我

<think>首先,用户的问题是关于在UnrealEngine5中使用C++创建Pawn并为其设置动画蓝图。用户提供了几个引用,我需要参考这些引用,但也要基于我的知识来回答。关键点: -用户想创建一个PawnC++中。 -然后为这个Pawn配置动画蓝图。 步骤分解: 1. **创建Pawn**:使用C++UE5中创建一个Pawn。 2. **配置动画蓝图**:为这个Pawn设置动画蓝图,这通常涉及到创建一个动画蓝图资源并链接到Pawn的骨骼网格体。 参考提供的引用:-引用[2]:讨论了如何将蓝图项目转换为C++项目,包括生成Visual Studio项目文件和创建C++。 -引用[3]:关于创建可操控的PawnUE5C++中。-引用[4]:展示了PawnC++代码示例,包括设置组件如StaticMeshComponent和CameraComponent。这些引用中没有直接提到动画蓝图,所以我需要基于一般UE5知识来补充。回答结构:-由于用户要求结构清晰,我应该逐步解释。 -使用中文回答。 -对于数学表达式,如果有,使用$...$或$$...$$,但在这个上下文中可能不需要。-在末尾添加相关问题。步骤: 1. **创建C++ Pawn**:-在Unreal Editor中,通过File>New C++ Class...创建新。-选择Pawn作为父。-命名,例如MyAnimatedPawn。-这会在项目中生成.h和.cpp文件。2.**在C++设置骨骼网格体和动画**:-在Pawn中,添加一个USkeletalMeshComponent成员来持有骨骼网格体。-在构造函数中初始化这个组件。-示例代码基于引用[4],但添加骨骼网格体。 3. **创建动画蓝图**:-动画蓝图是在编辑器中创建的蓝图资源。-步骤:-在Content Browser中,右键点击> Animation> AnimationBlueprint。-选择骨骼网格体(SkeletalMesh)作为目标。-命名,例如ABP_MyPawn。-在动画蓝图中,定义动画状态机等。 4. **链接动画蓝图Pawn**:-在PawnC++代码中,确保骨骼网格体组件使用指定的动画蓝图。-这通常在编辑器中设置,但也可以在C++中通过代码设置。5.**编译和测试**:-编译C++代码。-在编辑器中,创建基于Pawn蓝图,并设置默认的骨骼网格体和动画蓝图。详细步骤: -**步骤1:创建C++Pawn**-打开UnrealEditor。-文件> NewC++Class...-选择Pawn作为父,点击Next。-输入名,如MyAnimatedPawn,点击CreateClass。-这将生成MyAnimatedPawn.h和MyAnimatedPawn.cpp文件。- **步骤2:C++中添加骨骼网格体组件**-在头文件(MyAnimatedPawn.h)中,声明USkeletalMeshComponent:```cpp#include"CoreMinimal.h"#include "GameFramework/Pawn.h"#include"MyAnimatedPawn.generated.h"UCLASS()classYOURPROJECT_API AMyAnimatedPawn :public APawn{GENERATED_BODY()public://构造函数AMyAnimatedPawn();//骨骼网格体组件UPROPERTY(VisibleAnywhere,BlueprintReadOnly, Category= "Components")USkeletalMeshComponent*SkeletalMeshComponent;//其他代码...};```-在源文件(MyAnimatedPawn.cpp)中,初始化组件:```cpp#include "MyAnimatedPawn.h"#include"Components/SkeletalMeshComponent.h"//包含骨骼网格体组件的头文件AMyAnimatedPawn::AMyAnimatedPawn(){PrimaryActorTick.bCanEverTick =true;//创建骨骼网格体组件SkeletalMeshComponent =CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("SkeletalMeshComponent"));RootComponent =SkeletalMeshComponent; //设为根组件,或附加到其他组件//其他初始化...}``` -**步骤3:创建动画蓝图**-在Unreal Editor中:-在Content Browser中,右键点击> Animation> AnimationBlueprint。-在弹出的窗口中,选择目标骨骼网格体(SkeletalMesh)。你需要先导入一个骨骼网格体资源。-命名动画蓝图,例如ABP_MyPawn。-打开动画蓝图编辑器,设计动画逻辑(如状态机、混合空等)。 -**步骤4:链接动画蓝图Pawn**-在编辑器中:-创建基于MyAnimatedPawn蓝图(右键点击C++> CreateBlueprintclass basedon MyAnimatedPawn)。-打开这个蓝图,在Details面板中,找到SkeletalMeshComponent。-设置Skeletal Mesh属性为你的骨骼网格体资源。-设置Anim Class属性为你的动画蓝图(ABP_MyPawn)。-或者在C++设置默认值(但通常推荐在编辑器中设置):-在构造函数中,可以尝试设置默认动画蓝图,但这不是必须的,因为动画蓝图通常在蓝图中指定。 -**步骤5:编译和测试**-编译C++代码(在VisualStudio中构建)。-在编辑器中,放置Pawn到场景中或通过游戏模式使用。-测试动画是否正常工作。相关问题:-基于用户的问题,生成相关问题。 -例如:1.如何为Pawn添加自定义动画逻辑在C++中?2.动画蓝图中的事件图表如何与C++交互?3.在UE5中,如何优化动画性能?确保回答真实可靠:-基于UE5文档和最佳实践。-引用用户提供的引用,如果相关。 最终回答结构: -逐步解释每个步骤。-使用代码块展示C++代码。-结束时添加相关问题。</think>### UE5 C++ 创建 Pawn 并配置动画蓝图的步骤 在 Unreal Engine 5 中,使用 C++ 创建 Pawn 并为其配置动画蓝图涉及多个步骤,包括编写 C++ 代码、创建动画蓝图资源以及在编辑器中链接它们。以下是详细步骤,基于 UE5 最佳实践和用户提供的引用(如引用[3]和[4])进行说明。整个过程分为创建 Pawn 、添加骨骼网格体组件、创建动画蓝图和最终链接测试。 #### 步骤 1: 创建 C++ Pawn 首先,在 Unreal Editor 中创建 Pawn Pawn 代表可控制的游戏实体(如角色或载具)。 1. **生成 C++ **: - 打开 Unreal Editor,确保项目已启用 C++ 支持(参考引用[2])。 - 转到 `File > New C++ Class...`。 - 在父选择窗口中,选择 `Pawn` 作为基似引用[3]中的可操控 Pawn)。 - 输入名(例如 `MyAnimatedPawn`),点击 `Create Class`。 - 这将自动生成头文件(`MyAnimatedPawn.h`)和源文件(`MyAnimatedPawn.cpp`)。 2. **编写 C++ 代码添加骨骼网格体组件**: - 骨骼网格体组件(`USkeletalMeshComponent`)是动画的基础,它持有骨骼和网格数据。 - 在 `MyAnimatedPawn.h` 中声明组件: ```cpp // MyAnimatedPawn.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Pawn.h" #include "MyAnimatedPawn.generated.h" // 自动生成的头文件 UCLASS() class YOURPROJECT_API AMyAnimatedPawn : public APawn { GENERATED_BODY() public: AMyAnimatedPawn(); // 构造函数 // 骨骼网格体组件,用于动画 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components") class USkeletalMeshComponent* SkeletalMeshComponent; // 使用 class 前向声明 // 其他变量或函数(如移动逻辑) }; ``` - 在 `MyAnimatedPawn.cpp` 中初始化组件(似引用[4]的组件设置): ```cpp // MyAnimatedPawn.cpp #include "MyAnimatedPawn.h" #include "Components/SkeletalMeshComponent.h" // 包含骨骼网格体头文件 AMyAnimatedPawn::AMyAnimatedPawn() { PrimaryActorTick.bCanEverTick = true; // 启用每帧Tick // 创建根组件(可选,但推荐用于附加) USceneComponent* Root = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent")); RootComponent = Root; // 创建骨骼网格体组件并附加到根组件 SkeletalMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("SkeletalMeshComponent")); SkeletalMeshComponent->SetupAttachment(RootComponent); // 附加到根组件 // 可选:设置默认位置或属性 SkeletalMeshComponent->SetRelativeLocation(FVector(0, 0, 0)); // 设置相对位置 } ``` - **编译代码**:在 Visual Studio 中构建项目(参考引用[2]),确保无错误。 #### 步骤 2: 导入骨骼网格体资源 动画蓝图需要目标骨骼网格体。如果尚未导入: 1. 在 Content Browser 中,右键点击并选择 `Import to /Game...`。 2. 导入 FBX 或其他格式的骨骼网格体文件(例如 `SK_Character`)。 3. 确保骨骼网格体已正确设置骨骼和材质。 #### 步骤 3: 创建动画蓝图 动画蓝图是定义动画逻辑(如状态机或混合空)的蓝图资源。 1. **创建动画蓝图资源**: - 在 Content Browser 中,右键点击 > `Animation > Animation Blueprint`。 - 在弹出的窗口中: - 选择 `Target Skeleton`(例如导入的 `SK_Character_Skeleton`)。 - 命名动画蓝图(例如 `ABP_MyPawn`)。 - 点击 `Create`。 2. **设计动画逻辑**: - 双击打开 `ABP_MyPawn`。 - 在 `Anim Graph` 中: - 添加状态机(State Machine)定义动画状态(如 Idle、Walk)。 - 使用 `Blueprint Callable` 函数或变量控制过渡条件。 - 在 `Event Graph` 中: - 响应事件(如 `Event Blueprint Update Animation`)更新动画参数。 - 保存动画蓝图。 #### 步骤 4: 链接动画蓝图Pawn 将动画蓝图应用到 Pawn 的骨骼网格体组件。 1. **创建 Pawn蓝图**(推荐在编辑器中链接): - 在 Content Browser 中,右键点击 C++ `MyAnimatedPawn` > `Create Blueprint class based on MyAnimatedPawn`。 - 命名蓝图(例如 `BP_MyAnimatedPawn`)。 2. **在蓝图设置动画蓝图**: - 双击打开 `BP_MyAnimatedPawn`。 - 在 Components 面板中,选中 `SkeletalMeshComponent`。 - 在 Details 面板中: - 设置 `Skeletal Mesh` 属性为导入的骨骼网格体(例如 `SK_Character`)。 - 设置 `Anim Class` 属性为创建的动画蓝图(例如 `ABP_MyPawn`)。 - 保存蓝图。 3. **可选:在 C++设置默认值**(高级用法): - 如果需要在 C++ 代码中硬编码动画蓝图,修改 `MyAnimatedPawn.cpp` 的构造函数: ```cpp AMyAnimatedPawn::AMyAnimatedPawn() { // ... 现有代码 // 设置默认动画蓝图(需引用路径) static ConstructorHelpers::FClassFinder<UAnimInstance> AnimClassFinder(TEXT("/Game/Path/To/ABP_MyPawn")); if (AnimClassFinder.Succeeded()) { SkeletalMeshComponent->SetAnimInstanceClass(AnimClassFinder.Class); } } ``` - 注意:路径需匹配项目内容目录,否则可能失败。推荐优先使用蓝图设置。 #### 步骤 5: 测试和验证 1. **放置 Pawn 到场景**: - 在编辑器中打开关卡,将 `BP_MyAnimatedPawn` 拖入场景。 2. **添加控制逻辑**(如移动): - 在 C++ 中扩展 `MyAnimatedPawn` ,添加输入绑定(参考引用[3])。 ```cpp // 在 MyAnimatedPawn.h public: virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; // 在 MyAnimatedPawn.cpp void AMyAnimatedPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); // 绑定输入(例如移动) PlayerInputComponent->BindAxis("MoveForward", this, &AMyAnimatedPawn::HandleMoveForward); } ``` 3. **运行测试**: - 点击 Play 按钮,验证动画是否响应动作(如行走时播放 Walk 动画)。 - 调试:如果动画不播放,检查骨骼网格体是否匹配动画蓝图的骨骼,以及动画蓝图的状态机是否正确设置。 #### 注意事项 - **性能优化**:动画蓝图中的复杂逻辑可能影响性能,使用 LOD 或优化状态机[^3]。 - **C++蓝图交互**:动画蓝图可通过 `BlueprintImplementableEvent` 调用 C++ 函数,实现高效控制(如传递速度参数)。 - **常见错误**: - 骨骼不匹配:确保动画蓝图的 Target Skeleton 与骨骼网格体一致。 - 编译失败:检查 C++ 代码语法,确保所有头文件正确包含(参考引用[4])。 通过以上步骤,您将成功创建 C++ Pawn 并配置动画蓝图。如果需要更多细节,可参考 Unreal Engine 文档[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值