簡體   English   中英

在Unity Inspector中獲取任何類型

[英]Getting any type in Unity Inspector

編輯:添加了一些更多的細節。

我正在為我的游戲開發SaveManager系統。 基本上應該做的是;

1)通過拖放將“ ANY”用戶創建的Serializable類獲取到檢查器。 (保存數據)。

2)使用BinaryFormatter或XMLSerializer將該類寫入文件。

我希望能夠在以后的游戲中使用它。 因此,應該保存與數據類(類型)無關的數據(例如序列化程序)。 我將其用作資產,導入SaveManager,將序列化的類作為參數,然后讓其完成其余工作。 但是正如我所說,它應該能夠使用任何用戶創建的序列化類。

因此,問題在於,由於該“序列化類”將由用戶在“游戲項目”中(而不是在SaveManager項目中)編寫,並且我在SaveManager項目中沒有該“序列化”類類型,因此我不不知道如何制作SaveManager,請從檢查器中引用該類。

因此,可以說我在游戲項目中創建了此類(而不是在SaveManager項目中)

[System.Serializable]
public class SaveData
{
    public string Name = "Name";
    public int Number = 5;
}

現在,當我將SaveManager項目(資產)導入到我的“游戲”項目中時,我應該能夠將腳本拖放到SaveManager檢查器中,然后進行其余的工作。 由於BinaryFormatter適用於每種Serializable類型,因此類型的名稱實際上並不重要。 我的意思是BinaryFormatter是無類型的,只要類型是可序列化的即可。 我想使用該功能,並使SaveManager類型也自由。

因此,將來如果我想使用“在另一個游戲中”說“ MyNewSaveData”序列化的類,我希望能夠將其拖放到SaveManager檢查器中,讓其完成其余的工作。

現在的事情是,如果我使用

public object _SaveData;

在SaveManager腳本中,統一檢查器不會顯示它。

如果我用

public Object _SaveData

它將用戶創建的類型強制轉換為對象,而我丟失了所需的類型。

我嘗試使用System.Type,但是unity也不顯示它。

基本上我想做的是,獲取“任何”序列化類作為參考。 喜歡

public SerializedClass _SaveData;

或類似的東西

public Script _SaveData;

該引用應接受“任何”序列化類。 獲取它的類型,然后將其強制轉換為該類型。

當我使用

public Object _SaveData

如果我使用_SaveData.GetType(),則得到“用戶創建”的類型。 我手里有這個類型,但是我不能將Object轉換成那種類型。 我不知道如何使用該類型進行投射。

無論我做什么,它要么不會顯示在檢查器中,要么會強制轉換為另一種類型,並且會丟失數據。

我該怎么辦?

您不能這樣做,因為您無法在檢查器中拖放[Serializable]類,因此就項目管理而言,它沒有任何表示形式。 同樣,您仍然只能拖放實例,而不能拖放類本身。 您可以序列化對MonoScript的引用,但這僅用於編輯器,我不確定它會對您有什么好處。

您應該嘗試使用ScriptableObject,甚至在SaveManager項目中提供基本的抽象類型,並要求您的游戲項目從中派生。

但是無論哪種方式,我都不確定我確切地了解您要如何進行:一旦您輸入了類型,將如何處理? 您的游戲仍然需要設置實際數據,決定何時讀取/寫入該數據等,因此您如何只需拖放就可以期望經理自己自己弄清一切呢?

我所能看到的最好是您的游戲設置了數據,然后調用SaveManager.Save(myData)或.Load(myData),然后經理將實例保存為二進制或XML或其他格式。

順便說一句,我建議使用JSON,那里有很多很好的與Unity兼容的庫。 二進制文件太冒險了(您可以更改格式,可以與您節省下來的話再見,也可以享受在版本之間進行轉換的麻煩),而XML太冗長了。

暫無
暫無

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

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