Unityでブロックチェーンに触れてみよう（Symbol）

思った以上に簡単にUnity上でブロックチェーンに触れることができたので、メモがてら残しておこうと思います。

# １.Unityで新しいプロジェクトを作成
新しいプロジェクトを作成します。
# ２.UniTaskをインストール
非同期処理に必要なUniTaskをインストールします。

①メニューバーのWindow->Package Managerを選択
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666230/3dd81609-30d2-1c8a-d625-a6e2b483241b.png)
②Package Managerウィンドウの左上の＋をクリックし、Add package from git URLを選択
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666230/e1089050-e071-1205-3478-09af7e1f0fee.png)
③以下のURLを入力し、Addボタンをクリック
https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666230/30e3b6b5-1a4e-115d-7542-f056cfa5bb99.png)
④インストール完了

# ３.ブロックチェーン上のデータを取得するためのスクリプトを作成
ブロックチェーン上から、指定アカウントの情報を取得するためのスクリプトを作成します。

①メニューバーのAssets->Create->C# Scriptを選択
ファイル名は何でも良いですが『AccountCheck』としておきます。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666230/f663eddd-1569-b2d3-7ad5-f55fa01d8a0b.png)
②作成したファイルをダブルクリックしてエディタを開きます
③以下の内容をコピペして保存します。
```java:AccountCheck.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using Cysharp.Threading.Tasks;

public class AccountCheck : MonoBehaviour
{
    async void Start()
    {
		string node = "http://wolf.importance.jp:3000";
		string checkAddress = "NA6DKVBRZCLZ47KBLFJGZCODAZLYMBDLAVAYH2I";
		UnityWebRequest www = UnityWebRequest.Get( node + "/accounts/" + checkAddress );
		www.SetRequestHeader( "Content-Type", "application/json" );
		await www.SendWebRequest();
		var response = www.downloadHandler.text;
		Debug.Log( "response : " + response );
	}
}
```
# ４.作成したスクリプトをオブジェクトに割り当て
作成したスクリプトをオブジェクトに割り当てて実行できるようにします。

①Hierarchyウィンドウで適当なオブジェクトを選択し、InspectorウィンドウのAddComponentで３で作ったスクリプトを割り当て
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666230/c9e51b2b-8d07-ea4d-73f5-7f564dcc1f1c.png)

# ５.プロジェクトを実行して、結果を確認
プロジェクトを実行して、ブロックチェーン上からデータを読み出し、ログに表示します。

①再生ボタンをクリックし実行
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666230/c95576c7-487c-6a12-f659-71441f210e5e.png)
②Consoleウィンドウに、ブロックチェーン上から読み出したデータの情報が表示されていることを確認します。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666230/a01a2912-61c3-140f-6648-47d7effa8d0d.png)

# ６.おわり
以上でブロックチェーン上からデータを読み出すことができました。
どうでしょう？思ったより簡単では無いでしょうか？

５で読みだしたデータは、私のアカウントの情報になります。
３のスクリプトのcheckAddressを確認したいアカウントアドレスに書き換えることで、そのアカウントの情報を取得できます。
この情報の中には、所有しているトークン（Symbolだとモザイクという）とその所有数が含まれているので、例えば、持っているトークンによってゲーム内の挙動を変えることも可能です。

Symbolブロックチェーンには、COMSAというNFT等を売買できるプラットフォームがあるので、そこでエクスカリバーといったアイテムNFTを販売し、上記プログラムを使ってゲーム内のプレイヤーにエクスカリバーを持たせるといったことも可能になります。

今回は超簡単にブロックチェーンに触ることをメインに記事を記載したので、これだけですが、もちろんゲーム内でトークンをプレイヤー同士で送り合うといったことも割りと簡単に可能なので興味があれば、ぜひ色々調べてみて下さい。

↓送金などもやってみたい方は、toshiさんという方が作られている以下のページを参考にやってみると良いかと思います。
https://github.com/0x070696E65/symbol_cs_dual_sdk
Symbolのディスコードでは開発関係の情報が色々あるので、そちらもおすすめです。

# おまけ
Symbolブロックチェーンは、APIでブロックチェーンの情報を扱えるようになっているため、簡単に情報を読み出せます。
Endpointsは以下のページで確認できますので、欲しい情報を探してみるのも良いかと思います。
https://symbol.github.io/symbol-openapi/v1.0.4/#tag/Account-routes/operation/getAccountInfo

※トランザクション確認例
http://wolf.importance.jp:3000/transactions/confirmed?recipientAddress=NA6DKVBRZCLZ47KBLFJGZCODAZLYMBDLAVAYH2I&transferMosaicId=6BED913FA20223F8&pageSize=14

※追記：次の記事書いたのでリンクをペタリ

https://qiita.com/feiton/items/24edee4711c0ce4b64ee

https://qiita.com/feiton/items/3ccee6efef0a0722b1dd