2020 /12 /21 星期一 笔记
在协程中使用回调
void Start()
{
StartCoroutine(callBack());
}
private static IEnumerator callBack()
{
Application.ExternalCall("HideDropdown", true);
yield return true;
}
Unity发布成WebGL之后,可以与浏览器脚本进行交互
官方说明链接:https://connect.unity.com/doc/Manual/webgl-interactingwithbrowserscripting
之前Unity提供的Application.ExternalCall方法现在已经被设为过时。
现在需要用到的方法是在Plugins目录下添加“*.jslib”文件,将浏览器脚本写在里面。
你可以调用Application.ExternalCall() 和Application.ExternalEval()在你嵌入的网页中执行 JavaScript代码.
//网页中的HTML
public static void ExternalEval(string script);
//script 执行的JS代码
//Description
//在嵌入WEBGL的页面中执行JS代码
Application.ExternalEval("history.back()");
ExternalEval 现在该功能已过时。有关替代方法,请参见https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html
其他注意内容
Unity发布的WebGL会将键盘输入截取,导致只能在Unity生成的画布中输入,无法在浏览器其他地方进行输入。
Unity提供了“WebGLInput.captureAllKeyboardInput”属性,当该属性为“false”的时候,即可在浏览器其他地方输入,默认值为“true”。
参考Demo,地址如下,访问速度略慢,见谅。
http://www.nshworkshop.cn/unityweb/
WebGL不支持:
1、不支持Unity的 print,可用Debug.Log代替。
//摘自:我是橙子va
2、不支持动态链接库 DllImport**
比如说Unity模拟按键按下的动态链接库代码 [DllImport(“user32.dll”, EntryPoint = “keybd_event”)]
但不同浏览器提供的支持程度存在差异
https://connect.unity.com/doc/Manual/webgl-browsercompatibility
添加进度条
unity WebGl内容将在加载时自动呈现默认进度条。您可以通过提供自己的进度函数作为附加的实例化参数来覆盖默认的加载进度条。例如:
var gameInstance = UnityLoader.instantiate("gameContainer","%UNITY_WEBGL_BUILD_URL%",{onProgress:UnityProgress});
Unity 3D WebGL:在应用程序加载并准备好后运行Javascript代码?
详情:https://cloud.tencent.com/developer/ask/196683
WebGL 使用SendMessage传递多个参数
详情:https://www.cnblogs.com/zj-kingder/p/6805564.html
Unity的SendMessage本来就只支持一个参数,难怪我一直不成功
博客中使用了一种自定义分隔符的方式实现了多个参数的传递
unity中:
void inboundfunction(string indata)
{
string[] words = indata.Split('~');
data1 = words[0];
moredata2 = words[1];
anotherpiece3 = words[2];
}
JS中:
<script type=”text/javascript”>
<!–
function callbackunity(arg)
{
alert(arg);
var unity = unityObject.getObjectById(“unityPlayer”);
unity.SendMessage(“Rezzer”, “inboundfunction”, “item1~item2~item3”);
}
–>
</script>