【问题标题】:Property "Raycast target" does not work in animation属性“Raycast target”在动画中不起作用
【发布时间】:2021-08-21 16:19:24
【问题描述】:

TL;DR - 属性“Raycast target”(来自 Canvas 中的图像)已成功设置动画,但没有实际效果(在不应该的情况下通过自身传递事件)。


我在 Canvas 中有图像,我正在制作动画。在动画中,我更改了“Raycast target”属性,以便在动画结束后与后面的按钮进行交互。

检查器中的属性更改,但没有效果 - 当动画尚未完成且“Raycast 目标”为“True”时,我可以按下后面的按钮。

当我不使用动画并直接通过脚本更改属性时 - 一切都按预期工作。

我错过了什么?

我的场景:

Canvas
     |-Buttons
     |-Image (Foreground, Animated)

我的动画图像:

我的动画:

注意:动画器中的“写入默认值”不会影响任何内容。

Unity 2020.3.8.f1 LTS

【问题讨论】:

    标签: unity3d user-interface animation canvas raycasting


    【解决方案1】:

    我认为 raycastTarget 只是让 Unity 可以考虑将此对象用于光线投射事件。打开或关闭它可能不会对其背后的元素产生任何影响。未经测试我不确定,但他们在Documentation 中为 raycastTarget 属性声明了一行,这对这种情况没有太大帮助。

    我确信 Unity 中的 CanvasGroup 组件上有一个 blockRaycasts 属性。将此组件添加到对象中,如果它附加了图形(图像或其他东西),它应该阻止它后面的元素。

    【讨论】:

    • 我将引用我的帖子When I do not use animation and change propery directly through script - everything works as expected.。不幸的是,CanvasGroup 中的 blockRaycasts 在动画中也不起作用。
    【解决方案2】:

    我还没有找到解决方案,所以我通过脚本解决了问题。它检查动画状态并手动更改属性。在我的情况下,我有“空闲”状态,当动画不播放时处于活动状态。

    public class RaycastTargetFix : StateMachineBehaviour
    {
        public string interactableState = "Idle";
    
        public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
        {
            var image = animator.GetComponent<Image>();
            if (image) image.raycastTarget = !stateInfo.IsName(interactableState);
        }
    }
    

    脚本需要添加到动画师:

    当然raycastTarget属性不应该是动画的,否则不能通过脚本改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      相关资源
      最近更新 更多