我很想找到一种聪明的方法来处理2D游戏中的过场动画。我想我决定使用Animator
创建/控制过场动画,并移动实际的游戏对象。
我最喜欢的是:
这种方法意味着每个GameObject
都需要它自己的Animator
。那么我该如何触发正确的Cutscene呢?我将使用游戏阶段来控制游戏及其进度,例如:
if(gameStage == 34 && entering scene castle)
{
playCorrectCutscene();
}
我如何以及在何处提及我的所有过场动画?假设我在一个场景中有22个NPC,其中15个有自己的Animator
,因为它们有一个过场动画,我如何从NPC_11播放动画?
我想我正在寻找的是某种“Cutscene Manager”。最好的解决方案是使用ID获得List
每个过场动画(动画)。然后我可以使用ID来播放正确的动画。但由于每个动画都存储在实际GameObject
中,我不知道是否可能。
希望我有意义。
答案 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;并为您添加。