属性 "Raycast target" 不适用于动画

Property "Raycast target" does not work in animation

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


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

属性 检查器发生变化,但没有效果 - 我可以在动画尚未完成且“Raycast target”为“True”时按下后面的按钮。

当我不使用动画并直接通过脚本更改 属性 时 - 一切正常。

我错过了什么?

我的场景:

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

我的动画图片:

我的动画:

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

Unity 2020.3.8.f1 LTS

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

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

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

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属性不能做动画,否则无法通过脚本改变。