有一些错误我在知乎更新了:
https://zhuanlan.zhihu.com/p/375114938
--------------------------------------------------------------------------------------
约定:ABC都是动画蓝图,A是父亲 ,B是继承A的孩子,AB不同骨骼
版本4.26
基于ue的技术:Anim graph overrides和
Animation Blueprint Linking两种技术
Anim graph overrides:可以在B中修改A中某个动画节点所引用的动画序列。
Animation Blueprint Linking:可以在AB中分别指定某个功能模块用的AnimBP
有以上两个技术支撑,就可以完全的在不同骨架间自由的继承和重写了。
而且由于动画蓝图不再加载未使用的动画,因而还可节约内存。
分两种情况:
某段逻辑完全相同就可以用Anim graph overrides技术
某段逻辑完全不同就可以用
Animation Blueprint Linking
技术
Animation Blueprint Linking具体步骤
一个Animation Layer Interface AIN 定义了 Layer1 layer2 layer3 三个虚的layer
A 继承AIN 分别重载了layer1 layer2 layer3三个layer(layer中可以不写逻辑),在Anim graph中 分别用了layer1 layer2 layer3(重点是用了)
B继承A (但是B不能重载layer1 layer2 layer3)
A骨架生成C动画蓝图 继承AIN,重载三个layer,写A的具体逻辑
B骨架生成D动画蓝图 继承AIN,重载三个layer,写B的具体逻辑
在A的character中调用
Link Anim Class Layers 设置为C
在B的character中调用
Link Anim Class Layers 设置为D
-------------------------------------------------老的 废弃----------------------------------------------------------
1、B继承A,利用
Asset Override Editor编辑B对应A的动作。
B的Anim graph 就没有,Animation layer也没有,所以想直接扩展这方面的逻辑,貌似不行,但是有两条弯曲的路
a、在A中把逻辑写全,bool变量控制流程,在B中设置正确的bool,感觉没有多大意义,相当于所有的角色逻辑都写在了A中。
b、B的mesh 用post prosess anim blueprint。不过这ppab貌似逻辑上很难和A进行交互耦合,实现不了我们想要的继承功能。这个ppab在B之后 物理之前运行。
目前以上两个方案 很难和蓝图(c++)的继承相匹配。
但是B的event graph几乎和蓝图的继承一样
B能重载A的function和Custom Event
B能设置A的变量
B继承A有一个非常明显不可替代的好处:B和A 可以是不同的骨架。
2、如果A中充分用linked Anim graph呢?
其实这样解决不了根本问题,只是让A的逻辑更清晰而已。
因为link的C,必须和A同一个骨架,这就导致了其他骨架的B不能直接link C(没有Anim Graph你也写不了linked 节点),所以如果A作为parent,C一样要是纯逻辑不能有具体的动画资源。
总结:鉴于以上的局限性,anim graph的逻辑只能写在A中,如果B和A在逻辑上差异不大(相似度60%以上)可以把所有逻辑都写在A中。如果B和A的逻辑性差异非常大(相似度30%以下)不建议用继承关系。
https://zhuanlan.zhihu.com/p/147654817
https://www.unrealengine.com/zh-CN/tech-blog/tips-tricks-sharing-animation-blueprints
1、B继承AB的Anim graph就没有,Animation layer也没有,所以想直接扩展这方面的逻辑,貌似不行,但是有两条弯曲的路a、在A中把逻辑写全,bool变量控制流程,在B中设置正确的bool,感觉没有多大意义,相当于所有的角色逻辑都写在了A中。b、B的mesh 用post prosess anim blueprint。不过这ppab貌似逻辑上很难和A进行交互耦合,实现不了我们想要的继承功能。这个ppab在B之后 物理之前运行。目前以上两个方案 很难和蓝图(c++)的继承相..
在实际项目中,开发者有时希望
不同
的
骨架
间共享同一套
动画
蓝图
,尤其是状态机的重用,从而实现
动画
转换逻辑的统一的配置。实际运行时仍然使用
骨架
对应的
动画
资源。例如
不同
种类怪物的
动画
状态机共享。
引擎中的
动画
蓝图
是与
骨架
绑定的,无法直接跨骨骼应用;这里给出一个简单的
蓝图
使用小技巧来实现
动画
蓝图
的共享。
示例工程:
下载链接:https://pan.baidu.com/s/1FIWdNvgcYakajbTqJE89LA
适用版本:引擎版本 4.22.2 or later
示例说明:
打开项目,地图中有两个角色,一个
动画
蓝图
运用:在角色
蓝图
中嵌入
动画
蓝图
,在角色
蓝图
中的Mesh选项中Animation加入已有的
动画
蓝图
。
结构:
动画
蓝图
主要分为EnentGraph事件图,AnimGraph
动画
图。通常在EnentGraph中设置变量,在AnimGraph中调用设置好的变量(也可以从角色
蓝图
中获取变量)。
Blendspace:线性混合,复合节点,根据
不同
的数据,控制模型动作之间的切换,
在Cocos-2d场景
动画
中,常常出现多个Sprite的同一行为
动画
假设场景中此时有两个精灵sprite1,sprite2
他们其实点分别在场景左侧,需要完成的动作CCMoteTo到场景最右侧
初始状态如下图:
初始尝试:
- (void)playAction
//1.试图两个精灵播放同一个
动画
CGSize size = [[CCDirect
#include “Kismet2/BlueprintEditorUtils.h”
#include “Kismet2/KismetEditorUtilities.h”
void UYMToolBPLibrary::ReparentBlueprint(UBlueprint* Blueprint, UClass* NewParentClass)
if (!Blueprint || !NewParentClass)
UE_LOG(LogTemp, W
1. 首先,你可以使用一个循环来找到两个数中的较小值,作为循环的终止条件。
2. 在循环中,使用一个判断条件来判断当前的循环变量是否同时能整除两个数。
3. 如果能整除,将当前的循环变量作为最小公约数,并结束循环。
4. 如果不能整除,继续循环,直到找到最小公约数或者循环结束。
这样,你就可以在
UE4
蓝图
中计算出两个数的最小公约数了。\[3\]
希望对你有帮助!
#### 引用[.reference_title]
- *1* [小学生编程一些log](https://blog.csdn.net/ccanan/article/details/128761401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [图形学笔记](https://blog.csdn.net/k351316217/article/details/111608283)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]