如何通过单击按钮更改另一个对象的动画?
Posted
技术标签:
【中文标题】如何通过单击按钮更改另一个对象的动画?【英文标题】:How to change another object's animation from button click? 【发布时间】:2021-06-29 11:54:39 【问题描述】:我创建了这个按钮预制件,它使用内置的 Unity Button 组件、带有 Raycast Target 的图像组件以及在按下按钮时播放缩放动画的 Animator 组件。 在单击按钮图形的边缘并按住鼠标按钮时出现问题。
随着动画缩小按钮大小(以及带有 Raycast 目标的图像组件),鼠标光标在某个点不再悬停在按钮上,动画状态恢复正常。随着按钮自动缩小到正常大小(并且仍然按住鼠标按钮),按钮再次被按下 - 陷入循环。
我怎样才能防止这种情况发生?我是否需要修改组件的顺序或更改 Animator 中的某些内容?
【问题讨论】:
听起来应该只缩放视觉对象,而不是实际按钮。我会将其拆分为两个对象:实际按钮(没有图像或透明)和一个子对象,该对象具有精灵、动画师并将其光线投射目标设置为 false。 我认为是这样的原因是:即使动画表现如预期,如果你在这个按钮后面有另一个对象,它会在按钮缩小时被点击——这是应该发生的事情吗? 没错,我只想缩放视觉效果。光线投射目标的矩形应始终保持不变。但是,如果我将 Animator 组件添加到子级,则动画不会播放。 在将Animator添加到子对象时,您是否设置了Animator的“控制器”字段?这就是点击按钮后播放的原因。另外,也许检查父对象是否被检查为光线投射目标,而子对象不是。您可以通过在父对象的 OnClick 方法中添加一些内容(例如写入要记录的内容的函数)来验证按钮是否被正确单击。 是的,控制器设置为“按钮”动画器,但它似乎只在它们位于同一个游戏对象上时才起作用。 【参考方案1】:总结一下 cmets 中所说的内容:您希望光线投射目标在动画播放时保持相同大小。这就是为什么你应该将你的弹出按钮分成两个游戏对象:一个是实际的按钮(保持相同的大小),另一个是动画的,然后问题主要是“我如何从按钮单击更改另一个对象的动画”。
为此,您应该在实际按钮上使用 Button 组件,在动画对象上使用 Animator 组件,并且在 Button 的 onClick 列表中,您应该调用动画对象的 Animator 组件 -> SetTrigger,其名称为您想要作为参数的触发器。另请注意,动画对象不应是光线投射目标,但实际按钮应该。
您可以通过在动画控制器中设置过渡参数来选择在动画完成之前再次触发动画时(例如多次单击按钮时)会发生什么。但在这种情况下,只需将按钮与动画图像分开就可以满足您的需求,因为光线投射目标现在将保持相同的大小,并且动画不会再被多次触发。
【讨论】:
感谢您的帮助!我明天试试,如果成功了再告诉你。【参考方案2】:您可以添加计时器以检查动画是否正在运行。 示例:
//your animation duration here:
private float animationduration = 0f;
bool isClickable = true;
//set your timer with default 0
private float timer = 0f;
private void Update()
timer += Time.deltaTime;
if (timer > animationduration)
isClickable = true;
else
isClickable = false;
if (isClickable && Input.GetMouseButtonDown(0))
clickFunction();
timer = 0f;
void clickFunction()
//ur function in here
那么在动画结束之前点击功能就不能使用了。
【讨论】:
感谢您的回复!这绝对是一种选择,但我更愿意找到不需要代码的解决方案。也许有一种方法可以防止 Raycast 目标无法缩放并保持大小不变。以上是关于如何通过单击按钮更改另一个对象的动画?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过使用angularJS单击另一个组件的按钮来更改一个组件的视图?