簡體   English   中英

Unity和Hololens:讀取非文本文件異常

[英]Unity and Hololens: Reading non-text file exception

[編輯]首先我必須道歉,我剛剛注意到的代碼我粘貼為我們的代碼讀取PNG文件的傳輸沒有在.NET中后台的工作是(txt的閱讀做兩個工作,.net和il2cpp,如說明)。 調用堆棧來自另一個異常。 現在已更正

我們正在為Microsoft Hololens開發XR應用程序,其中涉及讀取txt和二進制文件(后者作為字節數組,由Texture2D.LoadImage作為Unity紋理加載)。 由於我們需要為用戶提供一種簡單的方式來更改/修改文件,這兩個文件都位於hololens的3D對象文件夾中。

一切工作正常,直到我們最近不得不將腳本后端從.net更改為il2cpp為止。 從那時起,盡管我們仍可以在不更改.net源代碼的情況下讀取txt的情況下嘗試讀取png文件,但仍會發現錯誤。

我們正在讀取這樣的文本文件(正常工作):

    Windows.Storage.StorageFolder objectsFolder = Windows.Storage.KnownFolders.Objects3D;
    Windows.Storage.StorageFile csvFile = await objectsFolder.GetFileAsync(oneFile);
    string contentText = await Windows.Storage.FileIO.ReadTextAsync(csvFile);

對於PNG,我們嘗試了幾種不同的方法,形成了最簡單的File.ReadAllBytes( pngFile.Path); (它適用於.net,但不適用於il2cpp),FileStream和其他方法,但它們總是在某些時候失敗。 最后一個是這樣的:

     Windows.Storage.StorageFolder pngObjectsFolder = Windows.Storage.KnownFolders.Objects3D;
     Windows.Storage.StorageFile pngFile = await pngObjectsFolder.GetFileAsync(i.ToString() + ".png");

     Windows.Storage.Streams.IBuffer buffer = await Windows.Storage.FileIO.ReadBufferAsync(pngFile);
     Windows.Storage.Streams.DataReader dataReader = Windows.Storage.Streams.DataReader.FromBuffer(buffer);


     dataReader.ReadBytes (fileData);

...引發此異常:

引發異常:Assembly-CSharp.dll中的“ System.NullReferenceException”

並在調用堆棧中僅包含以下內容:

在CsvReader.d__4.MoveNext()

因此在我們看來,我們的dataReader保持為空,但我們並不真正了解正在發生的事情,也不知道如何防止它發生。 任何人都可以提供一些閱讀此類文件的建議或想法嗎?

問候!

經過更多的工作之后,我們終於找到了為什么它不起作用……而且令人尷尬。 碰巧數組“ fileData”沒有初始化。 源代碼應為:

        Windows.Storage.StorageFolder pngObjectsFolder = Windows.Storage.KnownFolders.Objects3D;
        Windows.Storage.StorageFile pngFile = await pngObjectsFolder.GetFileAsync(i.ToString() + ".png");             
        Windows.Storage.Streams.IBuffer buffer = await Windows.Storage.FileIO.ReadBufferAsync(pngFile);                      
        Windows.Storage.Streams.DataReader dataReader = Windows.Storage.Streams.DataReader.FromBuffer (buffer);

        fileData = new byte[buffer.Length];     
        dataReader.ReadBytes (fileData);

那時,我們將fileData中的png文件作為字節數組,我們可以自由地對其進行所需的操作。 在我們的例子中,將其加載到Unity 3d紋理對象中:

        tex = new Texture2D(2, 2);
        tex.LoadImage(fileData);

因此,如果其他任何人都在努力使用il2cpp后端加載二進制文件,這似乎是一種可靠的方法。

暫無
暫無

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

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