`
aigo
  • 浏览: 2692366 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[UE4]不使用角色蓝图、动画蓝图、状态机,用“24K纯C++”实现动画播放

阅读更多

原文作者:@玄冬Wong 

 

不好意思,我稍稍标题党了,目前还不清楚如何用C++代码来实现BlendSpace和Montage的逻辑,如果这两个文件也不我们创建了,那么以下内容就是真正意义上的纯C++实现角色蓝图和动画蓝图。

 

逻辑用C++,动画处理用蓝图,对于有一定复杂度的项目来说这种做法很不方便,最方便的方式就是所有跟蓝图相关的操作能够让C++编码实现。即使是简单项目,但是如果模型数量有几十个,每个模型的动画切换逻辑是一样的,让你给每一个模型编辑动画状态机也是个体力活,所以如果这些可以用C++代码实现的话,只写一遍动画操作的逻辑,就可以一劳永逸。

 

用C++代码指定Actor的SkeletalMesh

用过蓝图的都知道,一般指定SkeletalMesh是在角色蓝图中指定的:

 

现在没有角色蓝图了,设置SkeletalMesh的C++代码如下:

USkeletalMesh* MyMesh = LoadObject<USkeletalMesh>(NULL, TEXT("SkeletalMesh'/Game/MyMesh.MyMesh'"));
MyActor* Actor = World->SpawnActor<MyActor>(FVector(1000, 1000, 0), FRotator(0, 0, 0));
Actor->GetMesh()->SetSkeletalMesh(MyMesh);

 
  

用C++代码播放BlendSpace (1D、2D均可)

因为动画蓝图也没有了,所以播放BlendSpace和AnimationSequence也通过C++代码实现:
两种材质的类型在C++中分别对应UBlendSpaceUAnimSequence

 1,先定义一个UPROPERTY变量,并在编辑器中设置该BlendSpace

UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Anims")
UBlendSpace1D *BlendSpace;
 

 

2,设置BlendSpace参数并播放动画,这里BlendSpace假设以X轴为方向

 需要包含头文件:#include "Runtime/Engine/Classes/Animation/SkeletalMeshActor.h"

ASkeletalMeshActor *Skel = Cast<ASkeletalMeshActor>(MyActor);
if (Skel)
{
	USkeletalMeshComponent *Mesh = Skel->GetSkeletalMeshComponent();
	if (Mesh)
	{
		Mesh->PlayAnimation(BlendSpace, true);
		FVector BlendParams(50.0f, 0.0f, 0.0f);
		Mesh->GetSingleNodeInstance()->SetBlendSpaceInput(BlendParams);
	}
}
 

  

用C++代码在指定Slot位置播放AnimationSequence

1,先定义一个UPROPERTY变量,并在编辑器中设置该UAnimSequence

 

UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Anims");
UAnimSequence *MyAnimSequence;
 
2,在指定插槽Slot上播放:
USkeletalMeshComponent *Mesh = MyActor->FindComponentByClass<USkeletalMeshComponent>();
if (Mesh)
{
	UAnimInstance *AnimInst = Mesh->GetAnimInstance();
	if (AnimInst)
	{
		AnimInst->PlaySlotAnimationAsDynamicMontage(MyAnimSequence, TEXT("UpperBody"), 0.1f, 0.1f, 1.0f, 30.0f);
	}
}
 
注:GetAnimInstance之前需要SetAnimInstanceClass,如何设置,参见:
http://aigo.iteye.com/blog/2285001

3,播放AnimMontage:
MyAnimTimer = AnimInstance->Montage_Play(MyMontage);
GetWorldTimerManager().SetTimer(PauseMontageTimerHandle, this, &MyActor::PauseMontageFunc, MyAnimTimer, false);
上面例子中UBlendSpace1D和UAnimSequence变量可以在编辑器中设置以外,也可以通过C++代码加载设置,具体方法:

C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>()

http://aigo.iteye.com/blog/2281558

 

文章参考自:

How can I play animations strictly from C++? 这个帖子讲了如何不使用动画蓝图,不使用动画状态机,纯C++编码方式实现动画播放。

https://answers.unrealengine.com/questions/292345/how-can-i-play-animations-strictly-from-c.html


Animation Blueprint, Implement Custom C++ Logic Via Tick Updates

https://wiki.unrealengine.com/Animation_Blueprint,_Implement_Custom_C%2B%2B_Logic_Via_Tick_Updates

Using Additive Animations

https://docs.unrealengine.com/latest/INT/Engine/Animation/AnimHowTo/AdditiveAnimations/index.html

 

 

  • 大小: 40.8 KB
分享到:
评论

相关推荐

    UE4使用C++在蓝图中实现打开外部exe程序功能(含源码)

    在UE4(Unreal Engine 4)中,开发者经常需要集成各种自定义功能,其中之一就是通过C++代码在蓝图中实现打开外部exe程序。这个功能对于游戏中的交互性或者工具集成非常有用,例如启动辅助编辑器、执行数据分析脚本等...

    UE4蓝图调用C++函数的工程分享

    在UE4(Unreal Engine 4)中,开发者可以结合蓝图和C++代码来构建游戏逻辑,这提供了灵活性和性能的平衡。本工程分享主要关注如何在蓝图中调用C++函数,分为两种主要方式:一是通过继承C++类的蓝图类直接调用,二是...

    UE5动画自定义节点, 打包也可以用, c++, c#

    2. 节点逻辑:在自定义节点中,你可以使用动画蓝图内置的函数和运算符来组合和构建你的动画逻辑。例如,你可以根据角色状态(如速度、方向)来调整动画播放速率,或者创建复杂的混合空间。 3. 打包与运行时加载:...

    UE4游戏编程蓝图c++语言教程

    虚幻引擎4(UE4)提供了两种主要的编程方式,即C++和蓝图。C++是一种通用的文本编程语言,适合进行底层逻辑和性能敏感的代码编写,而蓝图则是一种图形化编程工具,更适合快速原型设计和游戏逻辑的可视化表达。 在UE...

    UE4艺术大师:蓝图 全套

    《UE4艺术大师:蓝图 全套》是一个深入学习Unreal Engine 4(UE4)蓝图系统的资源集合。蓝图是UE4中一个强大的可视化编程工具,它允许艺术家、设计师和程序员通过图形化界面来创建游戏逻辑,而无需编写C++代码。这个...

    UE4蓝图节点详细介绍

    在虚幻引擎4(UE4)中,蓝图是一种可视化编程系统,它允许开发者,特别是初级开发者,无需编写C++代码就能构建游戏逻辑和交互。蓝图系统由一系列节点组成,这些节点构成了逻辑流程图,用于控制游戏对象的行为。本篇...

    UE4艺术大师蓝图全套

    4. **动画制作**:使用动画蓝图为角色创建行走、奔跑、跳跃等动画。理解动画蓝图和状态机的概念,以及如何实现动画间的平滑过渡。 5. **物理模拟**:学习使用物理材质和刚体来实现真实的碰撞效果。通过蓝图控制物体...

    ue4蓝图c++动态改变staticmeshactor材质例子动态修改纹理

    实现了通过蓝图把场景中的AStaticMeshActor和两个动态材质实例UMaterialInstanceDynamic 传给c++ 自定义函数参数。 并在自定义函数里面实现两张材质的动态交替变更,其中一张材质还动态加载了本地1.png图片,使得能...

    UE4蓝图节点详细介绍.zip

    蓝图是UE4的核心特性,它允许非程序员通过图形化界面进行逻辑编程,实现游戏对象的行为控制。这份"UE4蓝图节点详细介绍.zip"资源正是一份详细的UE4蓝图节点指南,对于初学者来说极具价值。 文档"UE4蓝图节点1.0.doc...

    Unreal Engine开发:蓝图系统与角色动画-1.UE4概述与安装.docxUnreal Engine开发:蓝图系统与角色动画-10.动画蓝图深入解析.docxUnreal Engine开发

    Unreal Engine开发:蓝图系统与角色动画_1.UE4概述与安装.docx Unreal Engine开发:蓝图系统与角色动画_10.动画蓝图深入解析.docx Unreal Engine开发:蓝图系统与角色动画_11.动画状态机与转换.docx Unreal Engine...

    (UE4UE5)UE5开发回合制游戏(蓝图和C++版本).zip

    (UE4UE5)UE5开发回合制游戏(蓝图和C++版本).zip (UE4UE5)UE5开发回合制游戏(蓝图和C++版本).zip (UE4UE5)UE5开发回合制游戏(蓝图和C++版本).zip (UE4UE5)UE5开发回合制游戏(蓝图和C++版本).zip

    UE4_LEJSON蓝图插件v4.19

    在UE4中,如果没有LEJSON插件,处理JSON数据通常需要通过C++代码实现,这对于蓝图用户来说较为复杂。 LEJSON插件提供了丰富的蓝图节点,如“解析JSON字符串”、“序列化对象到JSON”等,使得开发者可以直接在蓝图中...

    UE4动画烘焙器-ue4.27

    在UE4(Unreal Engine 4)中,动画烘焙是一个重要的技术环节,它涉及到游戏开发中的角色动画表现和性能优化。UE4.27版本引入了一些改进和更新,旨在为开发者提供更高效、更灵活的动画处理工具。下面将详细探讨UE4...

    UE4蓝图节点详细介绍.zip word版,UE4蓝图常用节点大全,节点详细介绍,虚幻初级开发者帮助很大。.zip

    虚幻引擎4(Unreal Engine 4,简称UE4)是一款强大的游戏开发平台,以其高度可视化和可定制化的蓝图系统闻名。蓝图系统允许开发者,尤其是那些不具备编程背景的初级开发者,通过图形化界面来创建复杂的逻辑和交互。...

    UE4串口,蓝图可调用,4.24.3亲测可使用,有详细教程

    在UE4中,开发者需要通过编写C++插件或使用第三方库来实现串口通信功能。这个“UE4串口”应该是一个定制的插件,它包含了串口接收和发送数据的功能,并且已经封装成蓝图节点,使得非C++程序员也可以通过图形化界面...

    UE4蓝图可视化脚本

    《UE4蓝图可视化脚本》是针对Unreal Engine 4(UE4)中核心特性——蓝图系统的一份详细文档。UE4是一款强大的游戏开发引擎,以其先进的图形渲染、物理模拟和高度灵活的可视化脚本系统著称。蓝图系统是UE4为非程序员...

    UE5中角色克隆的C++与蓝图实现方法

    通过使用C++或蓝图,你可以轻松地克隆角色,并复制其所有的属性和组件。希望本文的信息能帮助你在UE5项目中成功克隆角色。 在实际应用中,你可以参考Epic Games提供的官方文档和其他相关资源,例如Epic Developer ...

    UE4 Animation Starter Pack 62个动画(FBX).zip

    在UE4中,角色的动画可以通过动画蓝图实现,这是一种基于节点的图形化编程方式,可以定义动画状态机、动画混合以及事件处理。动画蓝图允许开发者创建复杂的逻辑,比如根据角色状态自动切换动画,或者响应玩家输入。 ...

    UE4电梯蓝图 高度自由DIY的ue4电梯地图

    在UE4(Unreal Engine 4)中,电梯蓝图是一种用于创建交互式电梯场景的工具,它允许开发者和游戏设计师实现复杂的游戏逻辑和环境交互。UE4是一个强大的游戏开发引擎,以其高质量的图形渲染、物理模拟和灵活的蓝图...

Global site tag (gtag.js) - Google Analytics