ตัวอย่างต่อไปนี้ เป็นการสร้าง WebGL ด้วย Unity3D เพื่อเชื่อมต่อกับ MetaMask สำหรับแสดงเลขกระเป๋า (wallet address)โดยมีขั้นตอนดังต่อไปนี้
เป็นกระเป๋า Ethereum แบบ open source ที่รองรับ token ที่อยู่บน Ethereum ซึ่งสามารถทำงานร่วมกับ WebBrowser ต่าง ๆ ได้ เช่น Chrome, Firefox หรือ Brave เป็นต้น
เริ่มจากการติดตั้ง MetaMask โดยเข้าไปที่ metamask.io > Install MetaMask …
เป็น Game Engine สำหรับพัฒนาเกม 2 มิติ และ 3 มิติ ที่ถูกออกแบบมาให้ใช้งานง่าย และสามารถพัฒนาเกมได้แบบ cross-platform เช่น Web, Windows, iOS และ Android เป็นต้น
ติดตั้ง Unity Hub ได้จาก link ต่อไปนี้
https://unity3d.com/get-unity/download
โหลด WebGL template จาก link ต่อไปนี้
https://github.com/underscoredLabs/web3-webgl-template
สามารถศึกษาข้อมูลเพิ่มเติมของ WebGL template จาก Unity Manual จากนั้น
● สร้าง Folder WebGLTemplates ไว้ที่ Assets
● นำ Web3Template ที่ดาวน์โหลดมาวางไว้ที่ WebGLTemplates ดังนี้
มาดูหลักการทำงานนิดนึงนะครับ
● index.html จะมีการ import web3Connect.js ในส่วน head ดังนี้
<script src="TemplateData/web3Connect.js"></script>
● ส่วน TemplateData/web3Connect.js ดังนี้
จากโค้ดข้างต้น จะเป็นการเปิดหน้า popup ของ Metamask และในกรณีไม่ได้ติดตั้ง Metamask จะแสดงข้อความ “Non-Ethereum browser detected. Please connect to a wallet”
ไปที่ File > Build Settings…
เลือก WebGL > Switch Platform
จากนั้นกด Player Settings… > ไปที่ Player > ในหัวข้อ Resolution and Presentation เลือก Web3Template ดังรูป
ทดสอบโดยไปที่ File > Build And Run
ตั้งชื่อ เช่น Unity Metamask จากนั้นกด save
จะปรากฎการแสดงผลบน Browser เป็นหน้า popup สำหรับร้องขอการเชื่อมต่อกับ Metamask ดังต่อไปนี้
โดยสามารถกด Next > Connect ได้เลยครับ
แต่ในกรณีที่ไม่ได้ติดตั้ง Metamask จะปรากฎข้อความดังต่อไปนี้
หลังจากสามารุเชื่อมต่อกับ Metamask ได้เรียบร้อยแล้ว ขั้นตอนต่อมาเราจะนำเลขกระเป๋ามาแสดงในเกม ดังนี้
เริ่มจากสร้างปุ่มไปที่ GameObject > UI > Button
จะปรากฎ Canvas ที่มี Button อยู่ จากนั้นตั้งค่า Canvas ดังนี้
● Render Mode : Screen Space — Camera
● Render Camera : ลาก Main Camera มาใส่ในช่อง
แก้ไจ Button ดังนี้
● Pos X : 0
● Pos Y : 0
● Width : 200
● Hight : 100
แก้ไข Text ของ Button ดังนี้
● Text : Get Address
● Best Fit : เลือก
เพิ่ม Text สำหรับใช้ในการแสดงเลขกระเป๋า โดยไปที่ GameObject > UI > Text
ตั้งค่า Text ดังนี้
● Pos Y : 200
● Width : 800
● Height : 100
● Font Size : 25
● Color : yellow
ตั้งค่าได้ตามที่ต้องการครับ
เขียน Script ที่ Button เพื่อแสดงค่าเลขกระเป๋าโดยไปที่ Button จากนั้นใน Inspector > Add Component > New script > จากนั้นแก้ไขเป็นโค้ดดังนี้
จากนั้นสร้างไฟล์ชื่อว่า web3.jslib ไว้ที่ Assets ดังนี้
โดย web3.jslib มีโค้ดดังต่อไปนี้
ไปที่ Button เพื่อเรียกการทำงาน OnClick() เมื่อกดที่ Button ดังนี้
● ไปที่ Button
● ใน Inspector กดเครื่องหมาย + ใน OnClick()
● ลาก Button จาก Hierarchy ไปใส่ไว้ที่ None(Object) ใน OnClick
● เลือกที่ No Function > GetWalletAddress > OnClick()
จากนั้นใน Inspector ส่วนของ Get Wallet Address (Script) ให้ลาก Text (ที่เป็นสีเหลือง)มาวางไว้ที่ Button Text ดังนี้
จากนั้น Build and Run อีกครั้ง และเมื่อกดที่ปุ่มจะเป็นการดึงเลขกระเป๋ามาแสดงดังนี้
เท่านี้เราก็สามารถดึงเลขกระเป๋าจาก Metamask มาแสดงในเกมได้เรียบร้อย เพื่อนๆอาจจะลองนำไปต่อยอดเป็นเกมที่มีความเกี่ยวข้องกับการใช้งาน Ethereum wallet ก็ได้นะครับ
สามารถโหลดทั้งโปรเจคได้ที่นี่ https://gitlab.com/thannob/UnityMetamask.git
สุดท้ายนี้ผมหวังว่าบทความนี้จะเป็นประโยชน์สําหรับเพื่อนๆนะครับ ถ้ามีโอกาสจะหาเวลาว่างมาเขียนเพิ่มเรื่องการเรียกและบันทึกข้อมูลลงใน Blockchain ผ่านทาง Smart Contract ครับ
ขอบคุณมากๆครับที่เข้ามาอ่านครับ
Reference: https://medium.com/coinmonks/unity-engine-metamask-wallet-6797d4699e45
บทความโดย อ.ผศ.ดร.ธรรณพ อารีพรรค
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต