簡體   English   中英

在Unity中運行的外部DLL的行為與在Visual Studio中運行的行為不同

[英]External DLL running in Unity behaves differently then when run in Visual Studio

我正在編寫一些C#來表示節點,邊和圖。 作為該代碼庫的一部分,我有一些類可以將圖形寫入xml /從xml讀取圖形。 我在Visual Studio中進行了一個測試,該測試創建一個圖形,將其寫入xml,然后從xml重新構造該圖形。 這似乎很好。 接下來,我想可視化Unity中的圖形。 我將圖形代碼編譯為帶有.net 3.5的.dll,並將其導入到Unity中。 Unity識別.dll,並且在嘗試運行它時不會引發任何錯誤。 但是,當我嘗試加載與以前相同的xml文件時,xml解析器會中斷並且無法加載圖形。

有誰知道這可能是什么原因? 回到Visual Studio,我嘗試將.net庫換成mono庫,猜測可能是一個問題,但是仍然可以正常工作。 Visual Studio的效果很好,但是Unity正在不斷發展。

我要解析的xml文件看起來像...

    <?xml version="1.0" encoding="utf-8"?>
<graph>
    <time time="0">
        <newNodes>
            <node type="Person" id="£*6O▒$5M¥▒(6»S}_-03+" />
            <node type="Person" id="JÇ$T!-%=▒¾4IW┼RR¿¿G%" />
            <node type="Person" id="X2¿+2B#¥V,ß«88!9-D;)" />
        </newNodes>
        <newEdges>
            <edge type="Knows" id="_«C~F/¾0¾€`J]¾F%†9╟▒" from="£*6O▒$5M¥▒(6»S}_-03+" to="JÇ$T!-%=▒¾4IW┼RR¿¿G%" />
            <edge type="Knows" id="Ð}Ø4┴~Ð;┴/$£YHߣH,P(" from="JÇ$T!-%=▒¾4IW┼RR¿¿G%" to="£*6O▒$5M¥▒(6»S}_-03+" />
            <edge type="Knows" id="J;R`߆`VH9*,J†1(5XÇ/" from="£*6O▒$5M¥▒(6»S}_-03+" to="X2¿+2B#¥V,ß«88!9-D;)" />
            <edge type="Knows" id="¾,┴N!S'@\N{?┴3£D;@‡$" from="X2¿+2B#¥V,ß«88!9-D;)" to="£*6O▒$5M¥▒(6»S}_-03+" />
            <edge type="Knows" id="*6)Ð7$Z¿†*RXCY½3I]X!" from="JÇ$T!-%=▒¾4IW┼RR¿¿G%" to="X2¿+2B#¥V,ß«88!9-D;)" />
            <edge type="Knows" id="┼¼~CØ0;N5C[X+OV«Ø!7]" from="X2¿+2B#¥V,ß«88!9-D;)" to="JÇ$T!-%=▒¾4IW┼RR¿¿G%" />
        </newEdges>
        <oldNodes />
        <oldEdges />
    </time>
    <time time="1">
        <newNodes>
            <node type="Person" id="+E%_WØ¿V_J7N-|]75«W!" />
        </newNodes>
        <newEdges>
            <edge type="Knows" id="Ç┼/»U.¾9+YQ8}╟C=#CV*" from="£*6O▒$5M¥▒(6»S}_-03+" to="+E%_WØ¿V_J7N-|]75«W!" />
            <edge type="Knows" id="€'T[┼‡/¿~8=Ç`Ç3]$R\*" from="+E%_WØ¿V_J7N-|]75«W!" to="£*6O▒$5M¥▒(6»S}_-03+" />
        </newEdges>
        <oldNodes />
        <oldEdges />
    </time>
    <time time="2">
        <newNodes>
            <node type="Person" id="]?:ER#349A@.%PXG8V§," />
        </newNodes>
        <newEdges>
            <edge type="Knows" id="Ç~-EY'@26@▒~ØU^I½1_/" from="JÇ$T!-%=▒¾4IW┼RR¿¿G%" to="+E%_WØ¿V_J7N-|]75«W!" />
        </newEdges>
        <oldNodes />
        <oldEdges />
    </time>
    <time time="3">
        <newNodes />
        <newEdges>
            <edge type="Knows" id="§/«;~'2H,}KÐ8»•ÐVMÐ{" from="+E%_WØ¿V_J7N-|]75«W!" to="]?:ER#349A@.%PXG8V§," />
        </newEdges>
        <oldNodes />
        <oldEdges />
    </time>
</graph>

在Unity中,解析器無法讀取newNodes下的所有節點。這小段代碼應該可以全部讀取它們。在Visual Studio中,它工作得很好,並且第一次解析了所有三個newNodes。 在Unity中,只有第一個是。

reader.ReadToFollowing(XmlConstants.NEW_NODES);
if (reader.ReadToDescendant(XmlConstants.NODE))
{
     do
     {
           Node node = XmlHelper.readNode(reader, nodeTypes);
           g.add(node, time);
           Slog.WriteLn("Loaded node " + node.Sguid);

     } while (reader.ReadToNextSibling(XmlConstants.NODE));
}

函數XmlHelper.readNode中的代碼僅調用reader.MoveToAttribute()和reader.Value

這個問題讓我很困惑。 任何見識將不勝感激。 謝謝!

啊哈 從昨天開始,我就一直試圖弄清楚這一點,我想我才找到了答案。

我添加了命令

reader.MoveToElement()

在我閱讀屬性之后。 那解決了。 我猜是reader.MoveToAttribute()向前跳了一步,后來又到達了一個屬性,這將剩下的遍歷都拋棄了。

暫無
暫無

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

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