Загрузка больших объектов Unity3d MYSQL

c# php mysql unity3d

91 просмотра

1 ответ

75 Репутация автора

В настоящее время я занимаюсь разработкой видеоигры, которая должна загружать уровни, записи и некоторые другие большие структуры данных в базу данных MySQL. Я анализирую эти объекты в шестнадцатеричную строку и загружаю данные в мою базу данных через сообщение WWW в Unity3D как varbinary.

object codedLevel = SaveGame.codedLevel;
byte[] codedLevelBin = ObjectToByteArray(codedLevel);
string codedLevelStr = "0x" + BitConverter.ToString (codedLevelBin).Replace("-", "");

Поскольку длина URL-адреса ограничена по размеру, я должен разделить шестнадцатеричную строку, загрузить ее по частям и снова объединить части при загрузке.

int partSize = 2000; 
for( int i= 0; i <= codedLevelStr.Length   ;i = i+partSize){
    string part = "";

    if (codedLevelStr.Length - i > partSize)
        part = codedLevelStr.Substring (i, partSize);
    else if (codedLevelStr.Length < partSize)
        part = codedLevelStr;
    else
        part = codedLevelStr.Substring (i);
    codedLevelLengthParts = codedLevelLengthParts + part.Length;
    //This connects to a server side php script that will add the level to a MySQL DB.
    // Supply it with a string representing the level
    string hash = Md5Sum(User + part+ i + LVLName +  secretKey);

    string post_url = addLevelURL+ "&LVL=" + part + "&name=" + WWW.EscapeURL(User)  + "&part=" + i/partSize + "&LVLName=" + WWW.EscapeURL(LVLName) + "&hash=" + hash;

    // Post the URL to the site and create a download object to get the result.
    WWW hs_post = new WWW(post_url);
    yield return hs_post; // Wait until the download is do 
}

Как я могу загрузить все объекты codedLevel из C # скрипта в Unity3D¿

Спасибо!

Автор: Charles Источник Размещён: 18.07.2016 02:35

Ответы (1)


1 плюс

85222 Репутация автора

Решение

Поскольку длина URL-адреса ограничена по размеру, я должен разделить шестнадцатеричную строку, загрузить ее по частям и снова объединить части при загрузке.

Только GETметод имеет ограниченную длину, состоящую из 2048символов, и вы в настоящее время используете GETметод для своего запроса.

Это должно быть сделано с помощью POSTметода с помощью WWWFormкласса.

Допустим, вы хотите отправить игрока name, ageи scoreмы можем закодировать его с помощью кода ниже:

WWWForm form = new WWWForm();
form.AddField("name", "Charles");
form.AddField("age", 29);
form.AddField("scrore", 67);

Добавить изображение профиля игрока или массив данных какого-нибудь вида?

byte[] bytes = playerProfilePic;
form.AddBinaryData("profilePic", bytes, "profilePic.png", "image/png");

или же

form.AddBinaryData("profilePic", bytes);

Теперь давайте отправим это на сервер.

WWW connection = new WWW(url, form);
yield return connection;

Вот и все. Вам не нужно отправлять этот кусок по частям с forпетлей.

Автор: Programmer Размещён: 18.07.2016 11:50
Вопросы из категории :
32x32