如何将Unity Engine + MetaMask钱包连接起来

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数据以显示游戏内物品)奠定基础。