2016-05-19 20 views
1

所以,我想創建在線團結遊戲的測試應用程序,但做什麼,我需要做的,我必須從十六進制偏移位於.prefab文件中讀取DATAS。 然後,我將從數據加載服務器端的預製件。對於來自客戶端的反對撞機。如何從Unity3D的預製文件讀取數據?

我必須念想unityVer,localScale,localPosition,localSize,對撞機大小...等

編輯DATAS:我必須說一個簡單的控制檯應用程序,而不是統一。

我不工作代碼:

try { 
      string[] prefabFiles = Directory.GetFiles(Path.Combine(Environment.CurrentDirectory, "data\\prefabs\\")); 
      foreach (var prefab in prefabFiles) { 
       if (prefab != null && prefab.Split('.')[1] == "prefab") { 
        try { 
         using (var reader = new BinaryReader(new FileStream(prefab, FileMode.Open, FileAccess.Read))) { 
          FileInfo info = new FileInfo(prefab); 
          Console.WriteLine("Analyzing File : " + info.Name); 

          reader.BaseStream.Position = 0xA; 

          //string unityVer = reader... 

          //float localPositionX = reader... 
          //float localPositionY = reader... 
          //float localPositionZ = reader... 

          //float localScaleX = reader... 
          //float localScaleY = reader... 
          //float localScaleZ = reader... 

          //float colliderRadius = reader... 
         } 
         Console.WriteLine("File parse success."); 
        } catch { Console.WriteLine("Parse error in the data file."); } 
       } 
      } 
     } catch (Exception e_Ex) { 
      Console.WriteLine(e_Ex.ToString()); 
     } 

我預製的十六進制樹:

HEX TREE IMAGE

我是新來的位於十六進制數據位置讀取和寫入數據,因此任何幫助將是真棒!

+0

恐怕沒有文件,解釋預製二進制文件的結構,你將不能夠做到這一點,除非你是很好的裂解裝置。出於這個世界的解決方案是獲得unity3d源文件,並檢查C++文件repsonsible解析prefabs,或只是要求團結給你的文件。但我可能會錯,也許有人會幫助你。 –

回答

1

我想你想得太深或是我誤解你的觀點。

如果您有您的項目中引用的預製,統一將創建它的一個實例,它只是不會在展會現場,並在內部保持。然後當你使用Instantiate時,它會複製所有的信息和數據。

這意味着你可以在預製訪問信息,你會訪問他們的任何遊戲對象以同樣的方式:

public GameObject myPrefab; 

void Start(){ 
    Debug.Log(myPrefab.transform.position); 
    Collider col = myPrefab.GetComponent<Collider>(); 
    // Use Collider 
} 
+0

哦,我必須讀取正常C#項目的數據。沒有在Unity中,它很容易閱讀。但不需要。與統一無關。 (: 謝謝... –

0

的部分答案是保存資產YAML文本文件,而不是二進制。該格式是人類可讀的,這使得解碼更容易。 項目設置 - >編輯,有資產序列化,應該設置爲強制文本。當然,所有現有的資產將被重新導入,現有的版本將不得不重新部署。