属性“Raycast target”在动画中不起作用
Posted
技术标签:
【中文标题】属性“Raycast target”在动画中不起作用【英文标题】:Property "Raycast target" does not work in animation 【发布时间】: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
【问题讨论】:
【参考方案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属性不应该是动画的,否则不能通过脚本改变。
【讨论】:
以上是关于属性“Raycast target”在动画中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
CSS "d" 路径 - 属性在 Safari、FireFox 中不起作用
观察 UIViewPropertyAnimator 正在运行问题