Unity游戏自动连接Metamask钱包(或任何web3钱包)的操作。
在本文中,您将涉及到的内容:
1. 创建一个web3 WebGL模板
2. 更改web3模板的player设置
3. 将您的Unity游戏与MetaMask连接
4. 在游戏中显示MetaMask地址。
Web3 WebGL模板
创建新项目
在项目的“Assets”下,创建一个名为WebGLTemplates的文件夹。
接下来,下载现有的WebGL模板或使用下面的模板。有关更多信息,请参见《 Unity手册》。将模板移至WebGLTemplates
最终结果应该是:
有两个设置:
1、在Web3Template内部的index.html中,我们正在导入脚本
Data</a>/web3Connect.js”><script/></div>
2、在TemplateData / web3Connect.js下,脚本为
if (window.ethereum) {
web3 = new Web3(window.ethereum);
// connect popup
ethereum.enable();
} else {
alert(“Non-Ethereum browser detected. Please connect to a wallet”);
}
简而言之,此模板说:加载网页后,连接到Web3钱包。
更改player设置
更改播放器设置
在您的Unity项目中,File > Build Settings…
Switch Platform到WebGL,完成后转到player设置…
将WebGL模板更改为我们之前添加的Web3Template。
要测试MetaMask连接,Build and Run
应该有一个连接提示
在游戏中显示地址
现在它已经连接好了,让我们利用这些数据。这个例子将显示游戏中的web3钱包地址。
Right Click > UI > Button
选择Button并Add Component。创建一个新脚本。在此示例中,脚本称为GetWalletAddress.cs
粘贴代码获取walletaddress.cs
// GetWalletAddress.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
// use web3.jslib
using System.Runtime.InteropServices;
public class GetWalletAddress : MonoBehaviour
{
// text in the button
public Text ButtonText;
// use WalletAddress function from web3.jslib
[DllImport(“__Internal”)] private static extern string WalletAddress();
public void OnClick()
{
// get wallet address and display it on the button
ButtonText.text = WalletAddress();
}
}
创建另一个名为web3.jslib的文件。
将代码粘贴到web3.jslib中。
// web3.jslib
mergeInto(LibraryManager.library, {
WalletAddress: function () {
// get address from metamask
var returnStr = web3.currentProvider.selectedAddress;
var bufferSize = lengthBytesUTF8(returnStr) + 1;
var buffer = _malloc(bufferSize);
stringToUTF8(returnStr, buffer, bufferSize);
return buffer;
},
});
现在代码已完成,将所有内容连接在一起。将Button对象拖到On Click()处理函数中,然后选择我们创建的OnClick()函数。
将Text拖到“Button Text”脚本中。
要进行验证,请再次构建并运行一次。
单击按钮应显示一个地址
这将为更复杂的交互(例如获取ERC-721数据以显示游戏内物品)奠定基础。