在 Unity UI 处于活动状态时暂停动画
Pausing an animation whilst Unity UI is active
我设计了两种模式来检查我在 Unity 中的项目,一种用于快速教程,一种用于提供有关该项目的更多信息,我还在后台播放动画。
我希望当模态框处于活动状态时动画在动画顶部暂停,如果您看不到动画,为什么要播放它?没错。
到目前为止,我的代码不起作用,我不确定为什么。
using UnityEngine;
using System.Collections;
public class ModalPauseController : MonoBehaviour
{
public GameObject tutorialModal;
public ScrubberAnimationController nac;
public void TutorialModalIsOpen()
{
if (tutorialModal.activeInHierarchy == true)
{
Debug.Log("The tutorial panel is active!!");
nac.UserClickedPauseButton();
}
}
}
nac.UserClickedPauseButton
引用了另一个暂停动画的脚本。
到目前为止,无论是通过检查器还是在游戏中,每当我切换模式的活动状态时,我的调试都没有反馈。
编写这样的代码非常棘手,因为如果你仔细想想
代码本身不会激活!!!
通常说你有一个面板“X”,它是一个弹出窗口或类似的东西 - 来来去去。
规则是你必须拥有那个东西的“控制器”
在某些 其他 项上,而不是在其自身上!
这是一个例子:
“megabomb”是一个时断时续的弹出式标志。它就在
然后就关闭了。有一个控制巨型炸弹开关的脚本。
请注意,巨型炸弹项目有一个“包装”。在 UI 中,“包装器”是一个非常简单的空面板。它是看不见的。请注意,包装器 始终保持打开状态。
脚本继续包装 - 就是这样。
请注意,“megabomb”项目本身通常有一个“包装”——灰色透明背景。因此,当弹出窗口出现时,后面的游戏全部变灰,并且您会看到弹出窗口。不要忘记,在这种情况下,灰色背景在这个例子中会被标记为“megabomb”,而实际的弹出式绿色(或其他)面板将在其下方。 (事实上,弹出面板本身很可能有很多部分——图像、按钮、边框等等)不要尝试使用“灰色背景”作为“保存脚本的包装器。你需要一个完全独立的包装器”在一切之外”,除了保存脚本之外什么都不做。
{顺便说一句,这是另一件让经验丰富的 Unity 新手开发人员搞砸的事情。通常你会有“some other class” 运行 弹出窗口,但在 Unity 中没有“no other class” - 如果你愿意,一切都是单身,因为它是一个 ECS系统,不是正常的OO。您实际上必须拥有 另一个游戏对象 (示例中标记为 'wrapper' 的对象)来控制相关游戏对象(示例中标记为 'megabombs' 的一个)。并且它必须始终处于活动状态。}
注意 - 如果您更喜欢“控制器脚本”实际上可以在其他任何地方(它不必在“持有”相关项目的游戏对象上)。然而,首先我鼓励您使用将其作为“包装器”的系统,如图所示,它有很多优点。 (更不用说最终它可能是预制件等)开始时一定要这样做。
这只是关于 Unity 的“他们没有提到的事情之一”:场景中的许多事情通常需要一个“包装器”对象。 (定位、相对旋转等其他原因也是如此。)
顺便说一句,正如我在评论中提到的那样。如果要制作弹出窗口,则 必须 与 Unity.UI 一起完成(即单击“添加 canvas” - 始终记得设置为 'scale with screen size' ,然后单击“添加面板”,然后单击“添加文本”)。
我设计了两种模式来检查我在 Unity 中的项目,一种用于快速教程,一种用于提供有关该项目的更多信息,我还在后台播放动画。
我希望当模态框处于活动状态时动画在动画顶部暂停,如果您看不到动画,为什么要播放它?没错。
到目前为止,我的代码不起作用,我不确定为什么。
using UnityEngine;
using System.Collections;
public class ModalPauseController : MonoBehaviour
{
public GameObject tutorialModal;
public ScrubberAnimationController nac;
public void TutorialModalIsOpen()
{
if (tutorialModal.activeInHierarchy == true)
{
Debug.Log("The tutorial panel is active!!");
nac.UserClickedPauseButton();
}
}
}
nac.UserClickedPauseButton
引用了另一个暂停动画的脚本。
到目前为止,无论是通过检查器还是在游戏中,每当我切换模式的活动状态时,我的调试都没有反馈。
编写这样的代码非常棘手,因为如果你仔细想想
代码本身不会激活!!!
通常说你有一个面板“X”,它是一个弹出窗口或类似的东西 - 来来去去。
规则是你必须拥有那个东西的“控制器”
在某些 其他 项上,而不是在其自身上!
这是一个例子:
“megabomb”是一个时断时续的弹出式标志。它就在
然后就关闭了。有一个控制巨型炸弹开关的脚本。
请注意,巨型炸弹项目有一个“包装”。在 UI 中,“包装器”是一个非常简单的空面板。它是看不见的。请注意,包装器 始终保持打开状态。
脚本继续包装 - 就是这样。
请注意,“megabomb”项目本身通常有一个“包装”——灰色透明背景。因此,当弹出窗口出现时,后面的游戏全部变灰,并且您会看到弹出窗口。不要忘记,在这种情况下,灰色背景在这个例子中会被标记为“megabomb”,而实际的弹出式绿色(或其他)面板将在其下方。 (事实上,弹出面板本身很可能有很多部分——图像、按钮、边框等等)不要尝试使用“灰色背景”作为“保存脚本的包装器。你需要一个完全独立的包装器”在一切之外”,除了保存脚本之外什么都不做。
{顺便说一句,这是另一件让经验丰富的 Unity 新手开发人员搞砸的事情。通常你会有“some other class” 运行 弹出窗口,但在 Unity 中没有“no other class” - 如果你愿意,一切都是单身,因为它是一个 ECS系统,不是正常的OO。您实际上必须拥有 另一个游戏对象 (示例中标记为 'wrapper' 的对象)来控制相关游戏对象(示例中标记为 'megabombs' 的一个)。并且它必须始终处于活动状态。}
注意 - 如果您更喜欢“控制器脚本”实际上可以在其他任何地方(它不必在“持有”相关项目的游戏对象上)。然而,首先我鼓励您使用将其作为“包装器”的系统,如图所示,它有很多优点。 (更不用说最终它可能是预制件等)开始时一定要这样做。
这只是关于 Unity 的“他们没有提到的事情之一”:场景中的许多事情通常需要一个“包装器”对象。 (定位、相对旋转等其他原因也是如此。)
顺便说一句,正如我在评论中提到的那样。如果要制作弹出窗口,则 必须 与 Unity.UI 一起完成(即单击“添加 canvas” - 始终记得设置为 'scale with screen size' ,然后单击“添加面板”,然后单击“添加文本”)。