ue4中动画通知的几种方式
2021/11/15 6:12:25
本文主要是介绍ue4中动画通知的几种方式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原创:蝶泳奈何桥
animation blueprint中的几种notify,神马通知碰撞开启关闭的东东都可以使用notify
1、简单的通知(blueprint)
直接在sequence or montage中new个Event
然后在graph中接收。
2、简单的通知(c++)
首先,animation bp必须是继承自定义的AnimInstance
然后新建两个通知AnimNotify_Begin和AnimNotify_End
方法的命名规则必须是AnimNotify_XXX,因为引擎里的代码就是这样匹配的
完整代码
MyAnimInstance.h
完整代码 MyAnimInstance.h #pragma once #include "Animation/AnimInstance.h" #include "MyAnimInstance.generated.h" /** * */ UCLASS() class MYSLATE_API UMyAnimInstance : public UAnimInstance { GENERATED_BODY() public: UMyAnimInstance(); UFUNCTION(BlueprintCallable, Category = "MyAnim") bool IsMoving(); UFUNCTION(BlueprintCallable, Category = "MyAnim") ACharacter* GetOwnerChar(); UFUNCTION(BlueprintCallable, Category = "MyAnim") void AnimNotify_Begin(UAnimNotify* Notify); UFUNCTION(BlueprintCallable, Category = "MyAnim") void AnimNotify_End(UAnimNotify* Notify); private: ACharacter* mOwnerChar; };
MyAnimInstance.cpp
MyAnimInstance.cpp #include "MySlate.h" #include "MyAnimInstance.h" #include "Engine.h" #include "MyChar.h" UMyAnimInstance::UMyAnimInstance() { mOwnerChar = nullptr; } bool UMyAnimInstance::IsMoving() { ACharacter* character = GetOwnerChar(); if (!character) return false; float wallSpeed = FVector::DotProduct(character->GetVelocity(), character->GetActorRotation().Vector()); return wallSpeed > 0.f ? true : false; } ACharacter* UMyAnimInstance::GetOwnerChar() { if (!mOwnerChar) { APawn* owner = TryGetPawnOwner(); mOwnerChar = owner ? Cast<ACharacter>(owner) : nullptr; } return mOwnerChar; } void UMyAnimInstance::AnimNotify_Begin(UAnimNotify * Notify) { AMyChar* mychar = Cast<AMyChar>(GetOwnerChar()); if (mychar) { FString str = FString::Printf(TEXT("--- AnimNotify_Begin - %d"), mychar->mHealth); GEngine->AddOnScreenDebugMessage(0, 5.0f, FColor::Green, str); } } void UMyAnimInstance::AnimNotify_End(UAnimNotify * Notify) { FString str = FString::Printf(TEXT("--- AnimNotify_End")); GEngine->AddOnScreenDebugMessage(0, 5.0f, FColor::Yellow, str); }
当然,你可以new个bp继承MyAnimInstance,然后动画蓝图再继承这个bp,这样扩展性好了。
3、单独起个AnimNotify类(blueprint,c++自己去转换)
可以重写两个方法,和其一些变量
然后添加到animation sequence or montage中
4、(最灵活)单独起个AnimNotifyState类(blueprint,c++自己去转换)
可以重写4个方法
然后添加到animation sequence or montage中,可以控制通知长度,也就是tick
其实看下源码就可以知道,里面这些东西是怎么调用的
这篇关于ue4中动画通知的几种方式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南