Возвращаемая строка из UnityWebGL jslib - PullRequest
0 голосов
/ 31 августа 2018

Я хочу использовать jslib для получения параметра url

код, подобный этому

jslib

  GetUrl: function(){
  var s ="";
  var strUrl = window.location.search;
  var getSearch = strUrl.split("?");
  var getPara = getSearch[1].split("&");
  var v1 = getPara[0].split("=");
        alert(v1[1]);
   return v1[1];
  },
});

с #

[DllImport("__Internal")]
public static extern string GetUrl();


void Start () {
    TextShow.text = GetUrl();
}

При запуске оповещения из jslib я вижу правильную строку в предупреждении, но текст UGUI ничего не показывает.

Почему это произошло?

1 Ответ

0 голосов
/ 31 августа 2018

Чтобы вернуть string из Javascript в Unity, вы должны использовать _malloc для выделения памяти, затем writeStringToMemory, чтобы скопировать данные string из вашей переменной v1[1] в недавно выделенную память и затем вернуть ее.

GetUrl: function()
{
  var s ="";
  var strUrl = window.location.search;
  var getSearch = strUrl.split("?");
  var getPara = getSearch[1].split("&");
  var v1 = getPara[0].split("=");
  alert(v1[1]);


   //Allocate memory space
   var buffer = _malloc(lengthBytesUTF8(v1[1]) + 1);
   //Copy old data to the new one then return it
   writeStringToMemory(v1[1], buffer);
   return buffer;
}

Функция writeStringToMemory сейчас кажется устаревшей , но вы все равно можете сделать то же самое с stringToUTF8 и доказать размер строки в третьем аргументе.

GetUrl: function()
{
  var s ="";
  var strUrl = window.location.search;
  var getSearch = strUrl.split("?");
  var getPara = getSearch[1].split("&");
  var v1 = getPara[0].split("=");
  alert(v1[1]);


   //Get size of the string
   var bufferSize = lengthBytesUTF8(v1[1]) + 1;
   //Allocate memory space
   var buffer = _malloc(bufferSize);
   //Copy old data to the new one then return it
   stringToUTF8(v1[1], buffer, bufferSize);
   return buffer;
}
...