从UnityWebGL jslib返回字符串

时间:2018-08-31 08:44:21

标签: javascript html unity3d get unity-webgl

我想使用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];
  },
});

c#

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


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

从jslib运行警报时,我看到警报中显示了正确的字符串,但UGUI文本什么也没有显示。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

要将string从Javascript返回到Unity,您必须使用_malloc分配内存,然后使用writeStringToMemorystring变量中的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函数现在似乎是deprecated,但是您仍然可以使用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;
}