2017-06-19 37 views
1

我知道Unity以基於組件的方式使用C#腳本,但在很多情況下這並不夠用。如何將C#對象與Unity gameobject關聯?

繼承人一個例子:假設我有一個炮塔類和一個lazer類。它們都從實現Shoot()方法的IShootable接口繼承。我想循環通過場景中的所有可射擊對象並調用Shoot()。聽起來很簡單,但我不一定要將這些腳本作爲組件添加到遊戲對象中,而是將其實例化爲傳統的C#方式:Turret t1 = new Turret();基本上,當我實例化C#對象時,我想實例化一個統一的遊戲對象並將其幾乎相同地對待。

我相當業餘,我知道沒有完美的答案。我只想要一個一致的方式來處理這種混亂,並使其不那麼混亂。

謝謝!

+0

除非你正在編寫一個基於文本的冒險遊戲,炮塔必須從某處射擊嗎?爲什麼不把炮塔作爲該物體拍攝的組成部分?然而,除了因爲不再使用組件系統,您的計劃沒有任何問題,因此您可以自己在「List 」的某個位置(就像您在正常的C#中)和foreach一樣跟蹤所有可以啓動的對象在主列表和通話拍攝。 –

+0

我明白你在說什麼。你可能是對的,沒有理由不使用Unity的組件系統。也許引擎不適合我的風格(?) – AymAPandah

回答

2

教程如果你想要一個對象在場景中存在,那麼它必須一個遊戲對象。沒有其他選擇。

現在,它完美地找到有你的炮塔和激光對象繼承MonoBehaviour,但他們不得不與一些是場景,不知何故有關。而場景中唯一存在的就是GameObjects。

  • 選項A:製作具有Turret和/或Laser作爲該行爲腳本的屬性的MonoBehaviour腳本。循環場景中的所有遊戲對象並獲取它們的MB組件並在其上調用Shoot(),這會調用Shoot()來封裝Turret或Laser對象。選項B:讓您的Turret和Laser腳本實例化並存儲對其關聯遊戲對象的引用。我以一種時尚的方式,在我正在從事的其中一場比賽中做到這一點。