一步上手:如何在 Unity 项目里高效调用 AppKit 与区块链对话

·

完成后端配置后,AppKit 就是一个随身携带的 Web3 百宝箱。AppKit.Evm 已经把 Nethereum 与 Wagmi 整合打包装好,帮你自动选路线:WebGL 请求交给 Wagmi,其余平台走 Nethereum。接下来用几个常见场景一次性教会你如何读取链上数据、转账 ETH、玩转 ERC20 代币,以及深度调用 Nethereum 原生方法。


发送 ETH 只需三行代码

当你的 DApp 需要让用户充值、打赏、或支付 gas 时,这段代码即插即用:

const string toAddress = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045";
BigInteger amount = Web3.Convert.ToWei(0.001);   // 转换 0.001 ETH
string txHash = await AppKit.Evm.SendTransactionAsync(toAddress, amount);

Debug.Log($"TX Hash: {txHash}");
默认的 gas 为 21,000,gas 价格由钱包自动议定,无需手动操心。

读取链上状态:实时余额,总是准的

var account = await AppKit.GetAccountAsync();
BigInteger balance = await AppKit.Evm.GetBalanceAsync(account.Address);
Debug.Log($"当前余额: {Web3.Convert.FromWei(balance)} ETH");

此操作为只读,不占 gas,当然也不需要用户签名。


与智能合约无障碍沟通

查询 ERC20 余额

合约地址、标准 ABI、用户地址三件套配齐即可:

const string contractAddress = "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984";
const string ownerAddress   = "0x3D30B1aB88D487B0F3061F40De76845Bec3F1e94";
const string abi = "[...]";   // 完整 ERC20 ABI

var balanceRaw   = await AppKit.Evm.ReadContractAsync(contractAddress, abi, "balanceOf", new object[]{ ownerAddress });
var decimals     = (await AppKit.Evm.ReadContractAsync(contractAddress, abi, "decimals") as BigInteger).Value;
var realBalance  = balanceRaw.Value / BigInteger.Pow(10, decimals);

发送 ERC20 代币

加上预估 gas、用户签名,搞定转账:

const string recipientAddress = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045";
BigInteger amount = 1;                        // 实际数量(如 1 USDT)

var arguments = new object[] { recipientAddress, amount };
var gasAmount = await AppKit.Evm.EstimateGasAsync(contractAddress, abi, "transfer", arguments);
var txHash    = await AppKit.Evm.WriteContractAsync(contractAddress, abi, "transfer", gasAmount, arguments);

深度 Nethereum:原生威力 One-Line 解锁

在移动端或桌面平台,如果你需要做复杂操作,可直接拿到一个已配置好的 Web3 实例:

var web3 = (AppKit.Evm as NethereumEvmService).Web3;
⚠️ 不要缓存这个 Web3,因为链切换时配置会自动更新。

看到这里,你可能已经想立刻跑一个小 demo。👉 这里有一份从创建账户到发送代币的完整实战录屏,点开就能跟着敲代码 >>


常见问题(FAQ)

Q1:AppKit 是否必须配合 MetaMask?
A:不强制。只要是 WalletConnect 协议的钱包都能连,TokenPocket、OKX Wallet 等均可。

Q2:Unity WebGL 会不会损失性能?
A:通过 Wagmi 与钱包交互走的是浏览器 API,几乎不占 Unity 渲染线程,实测 60 FPS 无压力。

Q3:如何动态切换链?
A:await AppKit.Network.SwitchChainAsync(chainId); 一行即可,AppKit 会自动 reload Web3。

Q4:revert error 看不到原因?
A:在 WriteContractAsync 捕获 RpcResponseException,其 ErrorMessage 会返回合约 revert 的具体字符串。

Q5:ABI 太长怎么办?
A:推荐把 ABI 拆成 .json 流文件,打包后放在 StreamingAssets,运行时 File.ReadAllText 动态加载即可。


小结

  1. AppKit.Evm 封装了常见转账、读状态、读写合约,API 简单好懂。
  2. 想深挖高级功能,可以直接掏出 Nethereum 的 Web3 实例,零配置即可用。
  3. 所有示例代码均可直接移动到 Unity 中运行,覆盖 WebGL、iOS、Android 乃至桌面端。

再遇到 “链上数据总对不上” 或 “签名弹窗不出来” 的烦恼?👉 点这里看完整避坑列表,一文扫清常见疑难杂症!