簡體   English   中英

無法將Unity3d WebGL項目構建連接到數據庫,在編輯器中工作正常

[英]Having trouble connecting Unity3d WebGL project build to database, works fine in editor

我使用此代碼將我的Unity項目連接到MySql數據庫:

public void SetupSQLConnection()
{
    Debug.Log("Connection Function Started");
    if (connection == null)
    {
        Debug.Log("If connection == null");
        try
        {
            Debug.Log("Try block started");
            MySqlConnectionStringBuilder connBuilder = new MySqlConnectionStringBuilder();

            connBuilder.Server = "localhost";
            connBuilder.UserID = "root";
            connBuilder.Database = "therapygame";
            connBuilder.Password = "";
            connBuilder.OldGuids = true;

            Debug.Log("String set");
            connection = new MySqlConnection(connBuilder.ConnectionString);
            Debug.Log("new MySqlConnection");
            connection.Open();
            Debug.Log("connection");
        }
        catch (MySqlException ex)
        {
            Debug.LogError("MySQL Error: " + ex.ToString());
        }
    }
}

這在Unity3d編輯器中運行我的項目時工作正常。 但是,當我構建WebGL時,它不再連接到數據庫。

在“new MySqlConnection”和“connection”的Debug.Logs之間發生錯誤。 換句話說,它在連接失敗.Open(); 聲明。

以下是Google Chrome中的控制台日志:

SystemException: Thread creation failed.

Rethrow as TypeInitializationException: The type initializer for 'System.Threading.Timer.Scheduler' threw an exception.

Rethrow as TypeInitializationException: The type initializer for 'System.Threading.Timer' threw an exception.

Rethrow as TypeInitializationException: The type initializer for 'MySql.Data.MySqlClient.MySqlPoolManager' threw an exception.


(Filename: currently not available on il2cpp Line: -1)

以下是該錯誤的來源(它太大了,我不得不將它分成幾個部分)(請參閱以下部分以了解要查找的內容):

https://0bin.net/paste/-28c3BvLx+Nx+Q+L#ltyOWWb+IembwSAgNKzPCRwvI5MkPOrUfgOAs3i4R+f

https://0bin.net/paste/ZleyLDeOcgr3kj-e#OPVr3oIC8-mcO9mXB1pV/+ONcdnUB+3I1RCy37/NI+p

https://0bin.net/paste/+rbHWsKmXhIXM50A#PaAFLCeDJZzIQTWczYbDepmubFhSaeDWqzcB+ItUTnb

https://0bin.net/paste/VdNv2NA8K0--ZXNM#fomzOVZ9iNOJDHequiSAbuv6I3lxDXXL+E5WK6GPKZv

https://0bin.net/paste/zcDPoycv5lqbjRcA#h0WNQdMSU4VtdIbwzOByW5csu68FERPvEdOKJz9oUeA

復制此內容並將其粘貼到ctrl + f find中:

function _JS_Log_Dump(ptr, type) {
var str = Pointer_stringify(ptr);
if (typeof dump == "function") dump(str);
switch (type) {
case 0:
case 1:
case 4:
console.error(str);
return;
case 2:
console.warn(str);
return;
case 3:
case 5:
console.log(str);
return;
default:
console.error("Unknown console message type!");
console.error(str);
}
}

有問題的線是

case 4:
console.error(str);

我已將System.Data.dll和MySql.Data.dll包含在我的Visual Studio引用中,以及所有I18N文件中。 我還將這些文件放在我構建的項目文件路徑中。

如果您需要其他信息,請告訴我,我試圖包括我認為相關的所有內容。

由於WebGL構建歸結為javascript,因此您無法在這些構建中使用標准C#網絡API(MySQL連接器使用ADO.NET,因此,不幸的是,它不符合WebGL構建版本)。 有關Unity WebGL Builds網絡的一些很好的信息,但這里有與您的情況相關的部分:

由於安全隱患,JavaScript代碼無法直接訪問IP套接字以實現網絡連接。 因此,.NET網絡類(即System.Net命名空間中的所有內容,特別是System.Net.Sockets)在WebGL中不起作用。 這同樣適用於Unity的舊UnityEngine.Network *類,這些類在構建WebGL時不可用。

如果您需要在WebGL中使用Networking,您當前可以選擇使用Unity中的WWW或UnityWebRequest類或支持WebGL的新Unity Unity功能,或者使用JavaScript中的WebSockets或WebRTC實現您自己的網絡。

請記住,它提到的“新的Unity網絡功能”是UNet的一部分, 它已被棄用 編輯:看起來整個NetworkTransport API都消失了。


希望您在挖掘這些文章的同時找到解決方案。 我沒有嘗試使用UNet,WebSockets或WebRTC進行任何操作,但就個人而言,為了在我自己的WebGL項目中解決這個問題,我使用UnityWebRequestPOST請求發送到我正在運行LAMP堆棧的AWS上托管的服務器。 我的php頁面處理請求,MySQL數據庫坐在同一台服務器上。

暫無
暫無

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

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