" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity2021發(fā)布WebGL與網(wǎng)頁交互問題的解決

 更新時(shí)間:2022年05月15日 16:52:12   作者:ttod  
本文主要介紹了Unity2021發(fā)布WebGL與網(wǎng)頁交互問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

(一)首先說Unity調(diào)用頁面方法的辦法。

首先是需要在工程的Asset目錄里面建一個(gè)Plugins文件夾,然后在文件夾里面創(chuàng)建一個(gè).txt文件,名字倒是無所謂,創(chuàng)建好后要把擴(kuò)展名改成.jslib。文件要包含類似如下內(nèi)容:

mergeInto(LibraryManager.library, {
 
  Hello: function () {
    window.alert("Hello, world!");
  },
 
  HelloString: function (str) {
    window.alert(Pointer_stringify(str));
  },
 
  PrintFloatArray: function (array, size) {
    for(var i = 0; i < size; i++)
    console.log(HEAPF32[(array >> 2) + i]);
  },
 
  AddNumbers: function (x, y) {
    return x + y;
  },
 
  StringReturnValueFunction: function () {
    var returnStr = "bla";
    var bufferSize = lengthBytesUTF8(returnStr) + 1;
    var buffer = _malloc(bufferSize);
    stringToUTF8(returnStr, buffer, bufferSize);
    return buffer;
  },
 
  BindWebGLTexture: function (texture) {
    GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[texture]);
  },
 
});

這其中只有mergeInto的第二個(gè)參數(shù)是可以修改的,第二個(gè)參數(shù)是一個(gè)對象,這個(gè)對象里面包含了多個(gè)方法的引用,這些方法(例如:Hello()、BingdeWebGLTexture()等)都是在Unity編程中可以引入的。這些方法內(nèi)調(diào)用的方法(例如:wiindow.alert()、GLctx.bindTexture()等)都是將來頁面中可以被調(diào)用的。

具體在Unity編程中引入方法的方式以C#為例:

首先需要引入命名空間:

using System.Runtime.InteropServices;

其次需要寫具體引入代碼:

[DllImport("__Internal")] private static extern void Hello();

參考以下代碼引入和使用示例

using UnityEngine;
using System.Runtime.InteropServices;
 
public class NewBehaviourScript : MonoBehaviour {
 
    [DllImport("__Internal")]
    private static extern void Hello();
 
    [DllImport("__Internal")]
    private static extern void HelloString(string str);
 
    [DllImport("__Internal")]
    private static extern void PrintFloatArray(float[] array, int size);
 
    [DllImport("__Internal")]
    private static extern int AddNumbers(int x, int y);
 
    [DllImport("__Internal")]
    private static extern string StringReturnValueFunction();
 
    [DllImport("__Internal")]
    private static extern void BindWebGLTexture(int texture);
 
    void Start() {
        Hello();
        
        HelloString("This is a string.");
        
        float[] myArray = new float[10];
        PrintFloatArray(myArray, myArray.Length);
        
        int result = AddNumbers(5, 7);
        Debug.Log(result);
        
        Debug.Log(StringReturnValueFunction());
        
        var texture = new Texture2D(0, 0, TextureFormat.ARGB32, false);
        BindWebGLTexture(texture.GetNativeTextureID());
    }
}

(二)其次說說頁面方法調(diào)用Unity內(nèi)方法的辦法。

簡單說就是使用unityInstance發(fā)消息就行了。具體方法定義如下:

unityInstance.SendMessage(objectName, methodName, value);

其中的參數(shù)objectName是Unity場景列表中的物體的名字,這里注意要保證場景中只有一個(gè)叫這個(gè)名字的物體,別出現(xiàn)重名的,否則亂套了。methodName是發(fā)消息的方法名,value是方法的參數(shù),這個(gè)參數(shù)可以沒有,有的話可以是整數(shù)或者字符串。

具體使用方式參考如下:

unityInstance.SendMessage('MyGameObject', 'MyFunction'); 
unityInstance.SendMessage('MyGameObject', 'MyFunction', 5); 
unityInstance.SendMessage('MyGameObject', 'MyFunction', 'MyString');

不過這個(gè)unityInstance是內(nèi)部對象(我不知道怎么說這個(gè)話比較準(zhǔn)確,暫時(shí)先這么說吧。),如果要在外部引用這個(gè)對象,頁面代碼請參考如下:

var myGameInstance = null;
      createUnityInstance(canvas, config).then((unityInstance) => {myGameInstance = unityInstance;});
      
var SendCmd = function(funName){
        myGameInstance.SendMessage("ZongCai", funName);
}

這樣就是使用myGameInstance獲得了unityInstance的引用,可以用myGameInstance來發(fā)消息了。

官方參考:

WebGL:與瀏覽器腳本交互 - Unity 手冊

到此這篇關(guān)于Unity2021發(fā)布WebGL與網(wǎng)頁交互問題的解決的文章就介紹到這了,更多相關(guān)Unity2021發(fā)布WebGL與網(wǎng)頁交互內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用c# 自動(dòng)更新程序

    用c# 自動(dòng)更新程序

    這篇文章主要介紹了用c# 自動(dòng)更新程序的代碼示例,幫助大家更好的理解和使用c#編程語言,感興趣的朋友可以了解下
    2020-11-11
  • C#實(shí)現(xiàn)鼠標(biāo)移動(dòng)到曲線圖上顯示值的方法

    C#實(shí)現(xiàn)鼠標(biāo)移動(dòng)到曲線圖上顯示值的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)鼠標(biāo)移動(dòng)到曲線圖上顯示值的方法,是C#的WinForm窗體程序設(shè)計(jì)中非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • C#保存listbox中數(shù)據(jù)到文本文件的方法

    C#保存listbox中數(shù)據(jù)到文本文件的方法

    這篇文章主要介紹了C#保存listbox中數(shù)據(jù)到文本文件的方法,涉及C#操作listbox數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#使用Process類調(diào)用外部exe程序

    C#使用Process類調(diào)用外部exe程序

    本文通過兩個(gè)示例講解了一下Process類調(diào)用外部應(yīng)用程序的基本用法,并簡單講解了StartInfo屬性,有需要的朋友可以參考一下。
    2016-03-03
  • C#訪問網(wǎng)絡(luò)共享文件夾的方法

    C#訪問網(wǎng)絡(luò)共享文件夾的方法

    這篇文章主要為大家詳細(xì)介紹了C#訪問網(wǎng)絡(luò)共享文件夾的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Visual Studio C#創(chuàng)建windows服務(wù)程序

    Visual Studio C#創(chuàng)建windows服務(wù)程序

    用Visual C#創(chuàng)建Windows服務(wù)不是一件困難的事,本文就將指導(dǎo)你一步一步創(chuàng)建一個(gè)Windows服務(wù)并使用它,本文主要介紹了Visual Studio C#創(chuàng)建windows服務(wù)程序,感興趣的可以了解一下
    2024-01-01
  • C#學(xué)習(xí)教程之Socket的簡單使用

    C#學(xué)習(xí)教程之Socket的簡單使用

    這篇文章主要給大家介紹了關(guān)于C#學(xué)習(xí)教程之Socket的簡單使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • C#中的委托數(shù)據(jù)類型簡介

    C#中的委托數(shù)據(jù)類型簡介

    委托是一個(gè)類型安全的對象,它指向程序中另一個(gè)以后會被調(diào)用的方法(或多個(gè)方法)。通過本文給大家介紹C#中的委托數(shù)據(jù)類型簡介,對c委托類型相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • Winform在DataGridView中顯示圖片

    Winform在DataGridView中顯示圖片

    本文主要介紹在DataGridView如何顯示圖片,簡單實(shí)用,需要的朋友可以參考下。
    2016-05-05
  • C# DataGridView綁定數(shù)據(jù)源的方法

    C# DataGridView綁定數(shù)據(jù)源的方法

    這篇文章主要為大家詳細(xì)介紹了C# DataGridView綁定數(shù)據(jù)源的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評論

靖边县| 甘孜县| 南丹县| 高邮市| 贵南县| 尚志市| 南丰县| 四平市| 喀喇| 巴彦县| 广宗县| 东丰县| 贵德县| 韶关市| 内江市| 荥经县| 颍上县| 宜川县| 皋兰县| 桃园县| 革吉县| 遵义县| 东港市| 普格县| 闻喜县| 富蕴县| 瓮安县| 绥中县| 台湾省| 井陉县| 靖远县| 定结县| 渑池县| 太原市| 曲松县| 讷河市| 屏南县| 泸州市| 丰台区| 壶关县| 绍兴县|