Unity 2D:简单的Cutscene动画系统/经理

时间:2017-07-03 07:50:49

标签: unity3d unity5

我很想找到一种聪明的方法来处理2D游戏中的过场动画。我想我决定使用Animator创建/控制过场动画,并移动实际的游戏对象。

我最喜欢的是:

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

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

我如何以及在何处提及我的所有过场动画?假设我在一个场景中有22个NPC,其中15个有自己的Animator,因为它们有一个过场动画,我如何从NPC_11播放动画?

我想我正在寻找的是某种“Cutscene Manager”。最好的解决方案是使用ID获得List每个过场动画(动画)。然后我可以使用ID来播放正确的动画。但由于每个动画都存储在实际GameObject中,我不知道是否可能。

希望我有意义。

1 个答案:

答案 0 :(得分:1)

每个预制件创建1个Animator的完整预制件后,您可以使用bellow方法动态创建实例:

假设你有这样的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;
    }        
}

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

class SomeOtherScript : MonoBehaviour {
    public CutsceneManager CutsceneManager;
}

这样,您就可以将CutsceneManager拖放到您需要的每个脚本中。这样你就可以为所有类提供1个cutcenemanager实例。

现在,在你需要玩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

Cutscenes将被称为:SomeOtherCutscene.prefab

请注意,当您实例化时,不需要包含.prefab - Unity框架将会&#34;知道&#34;并为您添加。