thirdwebを使って、Unity上でNFTを取得してみよう
こんにちは、CryptoGamesのユウキです。
本日は、UnityでNFTを取得する方法を書いていきます。
当記事は、下の記事の続きになります。
なお、使用したコードはページの最後に貼っています。
0. はじめに
まずは、thirdwebで下のような「NFT Drop」を作成します。
やり方が不明の場合は、こちらのハンズオンをご参照ください。
1. パーツを作成する
下のように、テキストとボタンを追加しました。
なお、やり方がご不明な場合は、こちらの第5章をご参照ください。
2. スクリプトを作成する
では、下のスクリプトをダブルクリックして、スクリプトを作っていきましょう。
1) 変数を作成する
まずは、共通で扱う、ウォレットアドレスとコントラクトアドレスの変数を作成します。
それに伴い、「ConnectWallet」関数内の「address」も下のように変更しました。
2) NFTをカウントする関数を作成する
保持しているNFTの個数を表示する関数を作成します。
下のように、「BalanceOf」関数を使っています。
なお、どのような関数を使えば良いかは、ThirdwebのHPを確認するのが良いと思います。
下のように、「Unity」で確認しましょう。
https://portal.thirdweb.com/sdk/interacting-with-contracts/erc721#view-nft-balance
そして、下のように、第1章で作成した「Count」に代入します。
3) NFTをカウントする関数を自動更新にさせる
上で作成した、関数を、下のように、「Update」関数に入れます。
これにより、自動更新ができるようになりました。
4) NFTを取得する関数を作成する
続いて、NFTを取得する関数を次のように書きます。
こちらも、どうすれば取得できるのかは、公式で書き方を確認できます。
https://portal.thirdweb.com/sdk/interacting-with-contracts/erc721claimable
関数が設定できたので、下のように、ボタンを押したときに、この関数が呼ばれるように設定を行います。
この部分についてやり方が不明な場合は、こちらの第8章をご確認ください。
3. 実行して、確認する
では、スクリプトができたので確認していきましょう。
この部分についてやり方が不明な場合は、こちらの第9・10章をご確認ください。
このように画面が表示されました。
「Connect Wallet」ボタンを押して、ウォレット接続を行うと、このように、ウォレットアドレスとNFTの所持数が表示されました。
さらに、「GetNFT」ボタンを押して、メタマスクなどの処理を進めると、このように、NFTの所持数が増えました。
今回は以上です。
ぜひやってみてください。
以下、使用したコードです。
using UnityEngine;
using Thirdweb;
using TMPro;
using System.Collections.Generic;
using System.Threading.Tasks;
public class StartMenuManager : MonoBehaviour
{
public GameObject ConnectedState;
public GameObject DisconnectedState;
private ThirdwebSDK sdk;
private string address;
private string contractAddress = "0xbfC9A3e0E79A6A28344Af7afFAeD704D6EeC8df4";
void Start()
{
sdk = new ThirdwebSDK("goerli");
}
void Update(){
CountNFT();
}
public async void ConnectWallet()
{
// Connect to the wallet
address = await sdk.wallet.Connect();
// Disable disconnected state
DisconnectedState.SetActive(false);
// Enable connected state
ConnectedState.SetActive(true);
// Set the ConnectedStates "Address" GameObjects text to the wallet address
ConnectedState
.transform
.Find("Address")
.GetComponent<TMPro.TextMeshProUGUI>()
.text = address;
}
public async void CountNFT() {
var contract = sdk.GetContract(contractAddress);
var balance = await contract.ERC721.BalanceOf(address);
var text = "NFT balance: " + balance;
ConnectedState
.transform
.Find("Count")
.GetComponent<TMPro.TextMeshProUGUI>()
.text = text;
}
public async void GetNFT() {
var contract = sdk.GetContract(contractAddress);
var quantity = 1; // how many unique NFTs you want to claim
var tx = await contract.ERC721.ClaimTo(address, quantity);
}
}
Discussion