初始设置:

动画状态机:

MoveStop->Idle的条件:

使用该节点的目的:

在动画蓝图的过渡条件中使用该节点,保证上一个状态的动作完成后进入下一个动作。需求是MoveStop动作完成后才能进入Idle状态。

Bug现象:

启动游戏后,第一次进入该状态时会直接过渡到Idle状态。

此时状态机的状态:

状态机条件:

但是之后再次进入该状态就会正常。状态只会在Move和MoveStop之间过渡。BUG只在启动游戏后第一次进入该状态时出现。

原因:

float UAnimInstance::GetRelevantAnimTimeRemainingFraction(int32 MachineIndex, int32 StateIndex)

{

    if(FAnimNode_AssetPlayerBase* AssetPlayer = GetRelevantAssetPlayerFromState(MachineIndex, StateIndex))//AssetPlayer在这里是NULL

    {

        if(AssetPlayer->GetAnimAsset())

        {

            float Length = AssetPlayer->GetAnimAsset()->GetMaxCurrentTime();

            if(Length > 0.0f)

            {

                return (Length - AssetPlayer->GetAccumulatedTime()) / Length;

            }

        }

    }

    return 0.0f;

}

  

断点后发现第一次进入该状态时,AssetPlayer为NULL。

FAnimNode_AssetPlayerBase* UAnimInstance::GetRelevantAssetPlayerFromState(int32 MachineIndex, int32 StateIndex)

{

    FAnimNode_AssetPlayerBase* ResultPlayer = nullptr;

    if(FAnimNode_StateMachine* MachineInstance = GetStateMachineInstance(MachineIndex))

    {

        float MaxWeight = 0.0f;

        const FBakedAnimationState& State = MachineInstance->GetStateInfo(StateIndex);

        for(const int32& PlayerIdx : State.PlayerNodeIndices)

        {

            if(FAnimNode_AssetPlayerBase* Player = GetNodeFromIndex<FAnimNode_AssetPlayerBase>(PlayerIdx))

            {

                if(!Player->bIgnoreForRelevancyTest && Player->GetCachedBlendWeight() > MaxWeight)

                {

                    MaxWeight = Player->GetCachedBlendWeight();

                    ResultPlayer = Player;

                }

            }

        }

    }

    return ResultPlayer;

}

再进入GetRelevantAssetPlayerFromState查看到Player->GetCachedBlendWeight返回结果均为0.

由于状态机切换状态时先执行条件判断,再执行AnimNode的Update。所以未Update过的FAnimNode_AssetPlayerBase的BlendWeight都是0.导致返回的ResultPlayer是nullptr。

void FAnimNode_AssetPlayerBase::Update(const FAnimationUpdateContext& Context)

{

    // Cache the current weight and update the node

    BlendWeight = Context.GetFinalBlendWeight();

    UpdateAssetPlayer(Context);

}

解决办法:

避免GetRelevantAnimTimeRemainingFraction==0。小于0.1且不等于0,过渡条件为true。

注:可能是我自己使用上的问题,若有正确使用方法请告知。

GetRelevantAnimTimeRemainingFraction节点Bug的更多相关文章

  1. 网络子系统41_inet_peer平衡二叉树的删除

    //1.p存在左孩子,则使用p的左孩子的最右孩子替换p,然后重平衡树 //2.p不存在左孩子,则使用p的右孩子替换p,然后重平衡树 1.1 static void unlink_from_pool(s ...

  2. .Net敏捷开发框架6.1.6.2版本,联系QQ:6539471

    演示地址:www.fishcmonkey.com .NET敏捷开发框架 6.1.6.2 版本发布 新增手机流程-我的流程(可查看流程进度和表单内容) 新增手机流程-待办任务(可查看流程进度和表单内容, ...

  3. 迷你MVVM框架 avalonjs 1.3.9发布

    本次升级,avalon改进了许多内部方法,大大提升性能,并且带来异步刷新视图的新功能. ms-html内部不再使用异步 head元素中的avalon元素加入ms-skip指令 重构计算属性,现在超级轻 ...

  4. [SpriteKit] 制作瓦片地图小游戏

    概述 SpriteKit制作瓦片地图游戏,深入了解2D游戏制作过程 详细 代码下载:http://www.demodashi.com/demo/10703.html 说实话这个2D游戏实战的入门看的我 ...

  5. HDU 1011 Starship Troopers 树形+背包dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1011   题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...

  6. Jquery实现可拖拽的树菜单

    效果图例如以下所看到的:下载地址http://download.csdn.net/detail/javaquentin/8290417 <html xmlns="http://www. ...

  7. hive 总结四(优化)

    本文参考:黑泽君相关博客 本文是我总结日常工作中遇到的坑,结合黑泽君相关博客,选取.补充了部分内容. 表的优化 小表join大表.大表join小表 将key相对分散,并且数据量小的表放在join的左边 ...

  8. Ztree插件,定位节点时(focus)不能进入可视区域BUG解决方案

    相关插件版本: jquery.ztree.exedit-3.4.js jquery.ztree.all-3.4.js jquery-1.8.0.js function onAsyncSuccess(e ...

  9. 修复jquery.treeview的增加子节点的方法的bug

    1.修复理由 在一个android项目中用到了treeview控件(本来自己通过android的原生api实现了一个http://www.cnblogs.com/Mr-Nobody/p/3527688 ...

随机推荐

  1. 发现 git忽略没用

    git rm --cached GuoJiWeb/Properties/PublishProfiles/Profile1.pubxml

  2. 图解 classpath

    先引用几句网上流传的话: 首先 classpath是指 WEB-INF文件夹下的classes目录 classpath 和 classpath* 区别: classpath:只会到你指定的class路 ...

  3. 假装这些是MyEclipse的快捷键(1)

    Java快捷键 Alt + / 代码自动补全Alt + Shift + S 功能菜单 Ctrl + 1 代码自动修正Ctrl + / 单行注释/取消Ctrl + O 查看类的所有方法Ctrl + T ...

  4. Jquery当中当data为json串时,eval('(' +data+ ')')的解释

    var dataObj = eval('(' +data+ ')') data是返回来的json. dataObj就是json对象了. 为什么要添加 '(' 与 ')' 作为开始于结尾呢? json是 ...

  5. iOS 9/10强制使用https访问网络,使用了第三方SDK的应用需要配置的信息

    2017年01月01日起苹果将全面禁止使用http来访问网络. 网上扒了一些资源,解决方法还是有的,但是都不确定是否可以通过审核,毕竟实践才是检验真理的唯一标准. 后续如果上线成功,再来分享. 如果应 ...

  6. JS-小球碰撞反弹

    类似于屏保的一种动画,当小球碰到边框时,发生反弹,并且变化颜色. <!DOCTYPE html><html lang="en"><head>   ...

  7. 【经验记录】Jconsole Jvisualvm 监控Tomcat

    环境:centos 6 1.首先检查hostname是否正确,输入以下命令 hostname -i 如果输出机器ip,则表示正确,如果输出 hostname: Unknown host 查看/etc/ ...

  8. (转)jQuery EasyUI Tree - TreeGrid动态加载子节点

    有时我们已经得到充分的分层树形网格(TreeGrid)的数据. 我们还想让树形网格(TreeGrid)按层次惰性加载节点. 首先,只加载顶层节点. 然后点击节点的展开图标来加载它的子节点. 本教程展示 ...

  9. Python模块:PIL

    PIL:是Python Image Library的缩写,图像处理的模块.Image,ImageFont,ImageDraw,ImageFilter Image模块: 常用方法: open() #打开 ...

  10. (转)java缓存技术,记录

    http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇 ...