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