2017-07-03 53 views
0

我很努力想出一個聰明的方式來處理2D遊戲中的過場動畫。我想我已決定使用Animator創建/控制過場動畫,並移動實際的GameObjects。統一2D:簡單Cutscene動畫系統/管理器

我所用struggeling是:

這種方法意味着每個GameObject需要它自己的Animator。那麼,我如何觸發正確的Cutscene?我將使用遊戲關卡來控制遊戲和它的進步,因此,例如:

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

如何以及在哪裏我把我所有的過場動畫參考?假設我在場景中有22個NPC,並且其中15個人擁有自己的Animator,因爲他們有過場動畫,如何從NPC_11播放動畫?

我想我在找什麼是某種「Cutscene管理器」。最好的解決方案是在每個過場動畫(動畫)中添加一個ID爲List。然後我可以使用該ID來播放正確的動畫。但由於每個動畫都存儲在實際的GameObject我不知道這是可能的。

希望我有道理。

+1

您可以創建每個過場動畫作爲預製件給它一些參考名稱,然後實例化您需要的預製件 - 如果有很多過場動畫,則可以節省大量內存。 –

+1

@RafalZiolkowski我認爲你應該把它當作答案。使所有gameobjects預製和[加載](https://stackoverflow.com/a/44832347/3785314)他們與資源或assetbundles應該做到這一點。 – Programmer

+0

@Programmer - 回家後我會做,包括代碼示例 - 我不是日常工作中的團隊開發人員:) –

回答

1

一旦創建完成預製,每預製1個動畫,那麼你可以使用風箱的方法來動態創建實例:

讓說,你有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對象。然後你就可以在其他腳本中,你將需要表現出過場,像這樣營造經理公共變量:

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框架將「知道」併爲你添加它。

+0

我在哪裏播放實際的動畫? 說NPC1走在我的世界。但他也有2次過場動畫。我會實例化一個新的NPC1,然後只是播放過場動畫,然後將其刪除? (PS:所有的預製件應該保存在資源文件夾中嗎?我只是將它們放在預製文件夾atm中,如果我需要腳本中的一個,我將它附加在編輯器中。)。 –

+0

這取決於你的場景動畫是如何完成的。它可以獲得現有的NPC1作爲參數重新使用它嗎? –

+0

目前我只需將一個Animator附加到NPC1併爲每個過場動畫創建一個動畫。它會然後是NPC1我實例化並觸發正確的anim從? –