Unity 2D:简单的过场动画 system/manager

Unity 2D: Simple Cutscene animation system/manager

我正在努力想出一种巧妙的方法来处理我的 2D 游戏中的过场动画。我想我已经决定 Create/Control 使用 Animator 过场动画,并移动实际的游戏对象。

我正在苦苦挣扎的是:

这种方法意味着每个 GameObject 都需要自己的 Animator。那么我该如何触发正确的过场动画呢?我将使用游戏阶段来控制游戏及其进度,例如:

if(gameStage == 34 && entering scene castle)
{
    playCorrectCutscene();
}

我如何以及在哪里保留对我所有过场动画的引用?假设我在一个场景中有 22 个 NPC,其中 15 个有自己的 Animator 因为他们有过场动画,我该如何播放来自 NPC_11 的动画?

我想我要找的是某种 "Cutscene Manager"。最好的解决方案是为每个带有 ID 的过场动画(动画)制作一个 List。然后我可以只使用 ID 来播放正确的动画。但是由于每个动画都存储在实际的 GameObject 中,我不知道这是否可能。

希望我说得有道理。

一旦你创建了完整的预制件,每个预制件有 1 个 Animator,那么你可以使用下面的方法动态创建实例:

假设您有这样的 CutsceneManager 脚本:

class CutsceneManager : MonoBehaviour {
    public GameObject InstantiateResource(string folder, string name)
    {
        GameObject resource = Instantiate<GameObject>(Resources.Load<GameObject>(folder + "/" + name));
        if (resource == null)
        {
            Debug.LogErrorFormat("Cannot find resource {0} in {1}", name, folder);
            return null;
        }
        resource.name = name;
        return resource;
    }        
}

最简单的使用方法是将它附加到空对象上。然后你可以在其他脚本中为经理创建 public 变量,你需要在其中显示过场动画,如下所示:

class SomeOtherScript : MonoBehaviour {
    public CutsceneManager CutsceneManager;
}

这样您就可以将空的 CutsceneManager 拖放到每个脚本中您需要的地方。这样你就有了所有 类.

的 1 个 cutscenemanager 实例

现在,在你需要播放custscene的地方,你实例化:

class SomeOtherScript : MonoBehaviour {
    public CutsceneManager CutsceneManager;

    public void PlayMyCutscene() {
        GameObject cutscene = CutsceneManager.InstantiateResource("Cutscenes", "SomeOtherCutscene");
        cutscene.setActive(true); // Or whetever other method to fire it off
    }
}

关于文件夹结构,您需要:Assets\Resources\Cutscenes

过场动画将被称为:SomeOtherCutscene.prefab

请注意,在实例化一个预制件时无需包含 .prefab - Unity 框架会 "know" 并为您添加它。