В настоящее время я разрабатываю видеоигр, которым необходимо загружать уровни, записи и некоторые другие большие узлы данных в базу данных 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¿
Благодаря!
Поскольку длина 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
.