原创文章,转载请注明出处。

点击观看上一篇《UE4 Slate三 SlateUI代码讲解》
点击观看下一篇《UE4 Slate五 SlateUI如何自定义样式(Custom Style)》

虚幻引擎 SlateUI介绍

  • 1>前言
  • 2>SlateAnimation代码
    • 2.1>头文件
    • 2.2 CPP实现
    • 2.3 代码分析
      • 2.3.1 SLATE_DEFAULT_SLOT宏介绍
      • 2.3.2 构造中对上面的宏定义的变量进行赋值
      • 2.3.3外部SNew(SMyAnimationSlate)
  • 3>下面来看看效果,和文章开始的图一样

1>前言

我们都知道在UMG里面如何创建一个UMG的动画,其实就是时间帧动画。那么在Slate纯手写的代码上如何做动画呢?

2>SlateAnimation代码

先看看做出来的效果



我们将会用到Engine里面的FCurveSequence,对我们新建的Slate做一个透明度渐变的动画。

对此我新建了一个Slate的类

2.1>头文件

//外部Slot里面的都是作为这个Slate里面的ChildSlot出现
SLATE_DEFAULT_SLOT(FArguments, OutSlots)
//Slate动画演示类
class SMyAnimationSlate : public SCompoundWidget /*public SUserWidget*/
{public://SLATE_BEGIN_ARGS+SLATE_END_ARGS 其实是一个结构体, 内部写的东西都相当于写在了一个结构体里面SLATE_BEGIN_ARGS(SMyAnimationSlate){_Visibility = EVisibility::SelfHitTestInvisible;}//外部Slot里面的都是作为这个Slate里面的ChildSlot出现SLATE_DEFAULT_SLOT(FArguments, OutSlots)SLATE_END_ARGS()//外部执行SNew或者SAssignNew时候会调用Construct()void Construct(const FArguments& InArgs);//鼠标进入virtual void OnMouseEnter(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;//鼠标离开virtual void OnMouseLeave(const FPointerEvent& MouseEvent) override;//颜色变化FLinearColor SlateColorChanged();
private://Slate动画对象FCurveSequence MySlateCurveSequence;
};

2.2 CPP实现

void SMyAnimationSlate::Construct(const FArguments& InArgs)
{MySlateCurveSequence = FCurveSequence(0.f, 1.f);ColorAndOpacity = TAttribute<FLinearColor>::Create(TAttribute<FLinearColor>::FGetter::CreateSP(this, &SMyAnimationSlate::SlateColorChanged));ChildSlot[InArgs._OutSlots.Widget];
}void SMyAnimationSlate::OnMouseEnter(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
{if (!MySlateCurveSequence.IsAtEnd()){if (MySlateCurveSequence.IsInReverse() && MySlateCurveSequence.IsPlaying()){MySlateCurveSequence.Reverse();}else if (!MySlateCurveSequence.IsPlaying()){MySlateCurveSequence.Play(this->AsShared());}}
}void SMyAnimationSlate::OnMouseLeave(const FPointerEvent& MouseEvent)
{if (!MySlateCurveSequence.IsAtStart()){if (!MySlateCurveSequence.IsInReverse() && MySlateCurveSequence.IsPlaying()){MySlateCurveSequence.Reverse();}else if (!MySlateCurveSequence.IsPlaying()){MySlateCurveSequence.PlayReverse(this->AsShared());}}
}FLinearColor SMyAnimationSlate::SlateColorChanged()
{return FLinearColor(1, 1, 1, 1 - MySlateCurveSequence.GetLerp());
}

2.3 代码分析

2.3.1 SLATE_DEFAULT_SLOT宏介绍

SLATE_DEFAULT_SLOT这个宏是为了获取到外部的Slot,
比如外部
SNew(SMyAnimationSlate)
[
括号里面写的所有Slate都会作为一个整体传进来,我们就是想在外部SNew这个类,下面所有子节点都能应用我们的渐变动画。
]

//外部Slot里面的都是作为这个Slate里面的ChildSlot出现
SLATE_DEFAULT_SLOT(FArguments, OutSlots)

2.3.2 构造中对上面的宏定义的变量进行赋值

然后去Cpp构造里面实现一下, 没有为什么,按照下面写就是了。

void SMyAnimationSlate::Construct(const FArguments& InArgs)
{ChildSlot[InArgs._OutSlots.Widget];
}

那么外部是怎么SNew(SMyAnimationSlate) 这个渐变动画对象呢?

2.3.3外部SNew(SMyAnimationSlate)

SNew(SMyAnimationSlate)
[
这个里面的所有SNew的slot就是SLATE_DEFAULT_SLOT(FArguments, OutSlots)这个,目的是不用传值直接给过来。然后我们整体对其做动画。
]

//测试动画的
+ SConstraintCanvas::Slot()
.Anchors(0.f)
.Offset(FMargin(100, 600, 200, 200))    //这个可能会迷惑, 第一个参数在这是PositionX, 第二个参数在这是PositionY, 第三个参数在这是SizeX, 第四个参数在这是SizeY.找不到设置坐标的同学注意看这里
.Alignment(FVector2D(0.f, 0.f)) //同样的, 对应Alignment是个FVector2D
.AutoSize(false)            //对应AutoSize
.ZOrder(0)
[SNew(SMyAnimationSlate)[SNew(SButton).HAlign(HAlign_Center).VAlign(VAlign_Center).ContentPadding(0.f).OnClicked(this, &SMainSlate::OnFirstSButton_OnClicked)   //事件绑定的技巧, 转到定义, 看那边的代理是怎么定义的, 把参数和返回值拿过来定义一个函数即可.OnPressed(this, &SMainSlate::OnFirstSButton_OnPressed).OnReleased(this, &SMainSlate::OnFirstSButton_OnReleased).OnHovered(this, &SMainSlate::OnFirstSButton_OnHovered).OnUnhovered(this, &SMainSlate::OnFirstSButton_OnUnhovered)[SNew(STextBlock).Text(LOCTEXT("SMainSlate_ButtonSlateAnimation_Text3333", "测试Slate动画")).Font(FCoreStyle::GetDefaultFontStyle("Roboto", 24))]]
]

3>下面来看看效果,和文章开始的图一样

鼠标Hover上去之后会进行透明度减小,鼠标离开透明度再变回来

点击观看上一篇《UE4 Slate三 SlateUI代码讲解》
点击观看下一篇《UE4 Slate五 SlateUI如何自定义样式(Custom Style)》

谢谢,创作不易,大侠请留步… 动起可爱的双手,来个赞再走呗 <( ̄︶ ̄)>

UE4 Slate四 SlateUI如何做动画相关推荐

  1. UE4 Slate九 控件反射器Widget Reflector介绍

    原创文章,转载请注明出处. 点击观看上一篇<UE4 Slate八 SlateUI使用总结> 点击观看下一篇<UE4 Slate十 SlateViewer介绍> 虚幻引擎 Sla ...

  2. 利用UE4人偶做动画的工具选择

    uefy下载地址:  https://github.com/BilboTheGreedy/Blender-rigify-to-ue4. Mr mannequins插件下载地址:https://gith ...

  3. [UWP]用Shape做动画(2):使用与扩展PointAnimation

    上一篇几乎都在说DoubleAnimation的应用,这篇说说PointAnimation. 1. 使用PointAnimation 使用PointAnimation可以让Shape变形,但实际上没看 ...

  4. ue4小白人骨骼定义_动画短片在UE4中的工作流程都有哪些?来看游戏建模师如何分析的...

    CG摄影师兼导演Jeffy Zachariah谈到了他的动画短片WAKE的制作:在UE4中与Sequencer合作,摄像机设置,资产制作等. 想法 将动画视为通过运动说出来的故事或表情,甚至可以只通过 ...

  5. unity2D动画-角色切片与2DAnimation插件做动画

    unity2D动画-角色切片做动画 写在前面的话 开发环境与准备 用角色切片做动画 终于可以Key动画了 2DAnimation插件做动画 总结 写在前面的话 更新 建议有复杂2D动画需求的话用spi ...

  6. 不会做动画的程序猿不是好的动画师(如何用css3动画做动画)

    "看清animation,transform, @keyframes,transition这四个的脸,以后这四个来了就是要做动画了,看好你们的网页,除了这四个,谁管你们都不好使." ...

  7. 第四章:jQuery动画

    一.动画显示与隐藏 1. jQuery中隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局,如果在代码执行的时候,一 ...

  8. 动画制作·边学习边做动画·从零开始的动画世界

    从零开始的动画生活,请多指教 建模软件的选择:blender 选blender的原因最开始的主要的是免费,使用过后使用感受一级棒,快捷键是我用过最人性化的,没有之一,而且对于角色建模,入门很快 ble ...

  9. CABasicAnimation,CAKeyframeAnimation,CATransition,CAAnimationGroup,UIBezierPath之间做动画的不同点和各自的使用范围。

    CABasicAnimation,CAKeyframeAnimation,CATransition,CAAnimationGroup,UIBezierPath之间做动画的不同点和各自的使用范围. CA ...

最新文章

  1. poj3370(抽屉原理)
  2. 如何选择一线城市和二线城市?
  3. Debian 9.x “stretch“ 解决 /etc/rc.local 开机启动问题
  4. bash编程练习题及答案
  5. linux idea 启动报错StartupAbortedException: Fatal error initializing plugin idea.plugin.protoeditor
  6. Linux0.11内核--系统中断处理程序int 0x80实现原理
  7. 把txt文件中的json字符串写到plist文件中
  8. 初识JAVA--foreach语句的应用
  9. varnish构建高速缓存
  10. php自动关机代码,vb下的恶搞关机程序
  11. C语言中scanf函数的用法
  12. 共享经济开始崩溃,区块链能否再续共享经济神话?
  13. 计算机潮流分析22节点,第三章电力系统潮流分析与计算第七讲电力网络方程和矩阵及功率方程_255903070...
  14. 联想笔记本G50-70无线网卡问题
  15. IEC60870-5-101基本远动任务通信协议测试方法
  16. 展望未来「编程之路起始篇」
  17. 录制课件时,小米笔记本电脑,外接耳麦, 麦克风没那有声音,怎么办?
  18. THULAC:一个高效的中文词法分析工具包
  19. 付鼻窦瓦氏位与付鼻窦柯氏位区别
  20. 求数组中元素的平均值

热门文章

  1. [区块链安全-Ethernaut]附加GoodSamaritan解题思路
  2. gta5结局杀老崔我哭了_GTA5:玩家眼中的重情义,剧情中变定时炸弹,崔佛为何是个疯子?...
  3. linux笔记本触屏方向反了,[已解决]如何设置触摸板上下滚屏反转(像mac一样,和windows是反的)...
  4. 便宜SSL证书购买攻略:comodo,geotrust,rapidssl证书为例
  5. JavaScript 防抖(debounce)、截流(throttle)
  6. VUE中V-IF条件判断改变元素的样式
  7. C语言 四则运算来喽!!小朋友的数学不再愁!
  8. 多人联机的俄罗斯方块游戏(C++),游戏规则模仿任天堂Tetris99,基于qt,kcp,protobuf,qslog。
  9. 西门子博图功能指令——标准化
  10. 计算机学报和c类会议,ccf期刊目录_ccf_ccf a类