簡體   English   中英

無需預制即可實例化GameObject

[英]Instantiate GameObject without prefabs

我正在嘗試為我的游戲制作一個庫存系統,但是作為一個完整的初學者,在谷歌搜索后我有一些疑問。

我設計庫存系統的方式包括3個主要類別:

  1. SceneItem <---這是場景中的gameObject
  2. ItemData <---此存儲項的所有信息,並放入項類中
  3. 庫存處理器
  4. ItemName <---一個存儲所有可用項目名稱的枚舉

因此,每當我的角色拿起一個物品時,SceneItem中的ItemData都會復制自身,並添加到InventoryHandler中的列表中,這樣我就可以存儲所有物品的數據。

但是問題是,如果我以這種方式創建它,恐怕我需要創建一堆預制件,每個預制件都包含各自的腳本。 我認為這不是一個好方法。

我以為ItemName枚舉可以通過將怪物的戰利品連接到預制件的文件名來幫助我減少一些工作,但是我仍然需要為此創建一堆預制件

反正有解決方法嗎? 還是我自己做的方法不是最優的?

提前致謝。

Unity內部的所有對象都是Object或GameObject <-,它們仍然繼承Object。 意思是創建一個預制或非預制來實例化它。 它將仍然具有其GameObject類,並且內部將具有Transform類。 無論您做什么,都將包含代碼或腳本。 預制件只是一組將在過程中重復的數據。 不必擔心產生大量重復項,因為Unity知道如何使用相同的實例化項正確處理內存。 您甚至不必擔心在類中將擁有的屬性。 您唯一需要考慮的是運行時性能,而不是單個項目中包含多少個腳本。 有腳本和模型在您的場景中看起來可能很大。 但是,當它被編譯時,它不再重要了。 垃圾收集在運行時有很大幫助,但是如果您對對象有很強的引用,CLR將永遠不知道何時收集它,這是您必須自己做的事情。

更新

說您希望XML成為您解決方案的一部分。 這是一種很好的做法,但並不是完全明智的選擇,因為在實例化它時,您會吃光一些運行時過程。 每次創建項目時,都必須告訴GameEngine在XML模型上查找一些數據。 如果有幾個,那還不錯。 請記住,因為我們使用的語言是在運行時計算的。 從XML查找將變慢,也將變慢。 但是無論如何,您的方法都是Cleaner,關注點分離和其他Developer可以在XML的單獨文件上工作。

您甚至可以使用很多XML庫,為什么不使用JSON來代替,因為它們既可以序列化又可以反序列化到模型中。 為什么我推薦JSON? 好吧,如果您打算使用3rd Party Unity Game API。 您最終將不得不使用JSON而不是XML。 但是就像我說的那樣,將XML解析為JSON沒有問題。 最好從JSON開始,因為其他UNITY Game開發工具已經在支持它。

看一下Firebase for Unity,您可以在其中為游戲使用RealTime數據庫。 在此處鏈接FireBase SDK for Unity

可以使用的事實。 FireBase Storage,如果您也想在此處保存Prefab。

您所想到的解決方案是如此簡單,除非您精通性能,否則您將無法出錯,但是由於將來我們有很多Run頭來處理性能,例如Runtime Prefab Download。 在運行游戲時可以在其中預加載游戲項目的位置。 我確定您知道這一點。 繼續實現XML或實現我引用的JSON文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM