Loom, Truffle, Unityスタートガイド
本記事は、Getting started with Loom, Truffle and Unity(Zac Holland) の翻訳です。万一誤訳などありましたらPrivate Note機能でお知らせ下さい。
今後数週間の私のゴールは、Loomを使ってブロックチェーンゲームを作ることだ。私の中での最高のスタックは、コントラクト開発にはTruffle、クライアントの具体化にはUnityを使うというものだ。
私は直近の8時間を、これを理解するために費やした。チームやLoomコミュニティから多大なヘルプを受け、そしてこの件について他の人がこれ以上苦労しないよう、私の進歩をここに記録することにした。
ステップ1: Loomをインストール
この部分は簡単だ。単にあなたのOS用のチュートリアルに従うだけで良い。
またそこには、最新の状態をキープするためのDockerコンテナがいくつか用意されている。それらへのリンクはページ下部にある。
ステップ2: プロジェクトのセットアップ
私のプロジェクトはこんな感じだ。
ステップ3: dAppchainフォルダでTruffleをセットアップ
dappchainフォルダ内で、私はこの短いチュートリアルに従い最小限のtruffleプロジェクトのセットアップを行った。
そのフォルダへと入って yarn deploy
を実行するだけで、あなたのコントラクトをLoomチェーン上にアップすることができる。
注: デプロイが機能しない、もしくはエラーが発生する場合は、この2つの点が間違っている可能性がある!
- あなたのLoomノードに接続できないのかもしれない。別のコンピューターやVM上で実行している場合、truffle.jsまたはtruffle-config.json でIPが正しく設定されているか確認すること。
- Truffleやsolcには、Loomと組み合わせがよくないバージョンがある。Truffleはv4.1.8、Solcはv0.4.23であることを確認しよう。
ステップ4: unityclientフォルダでUnityプロジェクトをセットアップ
unityclientフォルダ内では、取ってきたUnity 3D SDK をこのフォルダに入れた (Loomには利用可能なUnityパッケージがまだない)。
ステップ5: TruffleでABIとアドレスをエクスポート
はじめに、Unity project の所にディレクトリを作成しよう: Assets/Resources/contracts/abi
及び Assets/Resources/contracts/address
あなたのコントラクトデータは、これらフォルダにエクスポートされる。
今度は Truffle projectへ戻って、マイグレーションフォルダ内に 99_export_abis.js
というファイルを追加する。あなたのプロジェクトは現在こんな感じに見えているはずだ。
マイグレーションフォルダ内の各ステップは、マイグレート/ デプロイ時に呼び出され、99が最後のステップとなる。以下のようになるはずだ:
あなたのプロジェクトが私のものと同じように正確にセットアップされていれば、これらは動作するはずだ。もし何かしら名前を変更してしまったら、上のコード内のパス更新を行うよう確認すること。
また同じく yarn deploy
やyarn deploy:reset
を実行して、これらABIやアドレスのファイルがUnityプロジェクトディレクトリへと置かれることを確認する。
ステップ6: Unityシーンのセットアップ
次は新しいシーンを作ろう。新しいシーンでは、 SimpleStoreHandler
という新規スクリプトを添付した空のゲームオブジェクトを作成する。次のようになるはずだ:
こちらが SimpleStoreHandler
スクリプトの内容だ。
全体的によくコメントされているが、もし何か質問があればお知らせいただきたい!
最後に: テスト
Unityプロジェクトを実行してみよう!Loomからのメッセージやデータをいくつか見れるはずだ!
もし何か問題があれば私にお知らせいただければ!この他にもみなさんが直面した問題を追記していくつもりでいるし、このセットアッププロセスは難しくあるべきでないと私は願っている!
編集: エラーのトラブルシューティング
Exception: JSON-RPC Error -32603 (Internal error): name is not registered
もしUnityでこのエラーが発生したら、それはつまりアドレスでコントラクトにアクセスしなければならない際に、コントラクト名でアクセスしようとしてしまっているということだ。Go-Loomプラグインのみコントラクト名でアクセスが可能であり、Solidity EVMコントラクトはアドレスでアクセスしなければならない。この場合あなたがすべきなのは、コントラクトのアドレスを取得し、ステップ6の58行目にてアドレスを使用し EvmContract
クラスをインスタンス化することだ。
ソースコード
ETHのチップ箱!