欢迎来到使用Unity游戏引擎制作的NEO区块链游戏的’A-Z’多系列讲解教程的第2部分。 在第1部分中,我们设置了基本的Unity环境,并准备好连接到我们的私有测试网络。 在第2部分中,我们将设置这个测试网。
我们将保证每个系列内容的简洁清晰,从而对整体的工作流程做出全面地演示说明。某些内容我们会做出快速的讨论,有任何不清楚的地方,随时欢迎你发表评论,我很乐意为你解答。
私有测试网络
NEO Lux提供了一些方便的方法,可以用于将你的游戏连接到官方的测试网或者是主网。
但在本教程中,我们会搭建自己的私有网络。这个过车是非常简单的,一旦你克服了最初的障碍(我会引导你),你会发现这比使用测试网络更加简单。例如,尽管填写用于测试的GAS或者Tokens的申请表格可能不是世界上最困难的任务,但我发现就这样一点点小摩擦,往往会扼杀我继续的热情和动力。
你也可以在本地运行你自己的私有网络,不过在本教程中,我们将设置自己的服务器。这会使得团队工作或者构建工作这类事情更加简单直接。我将使用Digital Ocean。因为根据我的经验,他们具有良好的性价比。
免责声明:我不是一个后端/服务器开发者,我猜“中等”水平的人应该会喜欢使用命令行工具。对于那些知道自己在做什么的人来说,这些内容应该很容易。如果你了解Linux 和 Docker的话,可以直接从Docker Hub安装NEO PrivateNet并使用Docker Compose运行NEOSCAN。对于其他那些或多或少是我这种水平的人来说,接下来的内容应该还是相当简单直接的。
如果你还没有Digital Ocean账户的话,就去创建一个。然后使用以下选项创建一个Droplet。
使用16.X或者18.X版本的Ubuntu
使用中配应该就足够了 – 你可以在配置中自行尝试,并在评论中告诉我你的试验的结果
SSH登入到你新建的Droplet并安装docker。 如果你按照Digital Ocean提供的指南进行操作的话,这个过程将非常简单:https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04
注意:在执行最开始的一步,向系统添加官方Docker库的GPG键这步操作时,我遇到了点小问题。我只是简单地跑了两次命令,然后一切都很顺利。
然后安装docker组件。同样地,安装说明非常的简单。只需要确保你看的是针对Linux系统的说明就行。
安装私有网络和NEOSCAN
运行和安装我们自己的私有网络,这是最为困难的一步,好在City of Zion的人帮我们很好的做到了这一点。你可以点击这个链接查看他们的全部说明指导。同样地,SSH登录到你的Droplet,基本上我们只需要输入几个命令就行:
首先,从hub上下载docker镜像:
docker pull cityofzion / neo-privatenet
…下载NEOSCAN …
wget https://raw.githubusercontent.com/slipo/neo-scan-docker/master/docker-compose.yml
…并运行privnet …
docker-compose -f docker-compose-neoscan.yml up
让它运行起来,然后转到http:your-droplet-ip-address:4000查看NEOSCAN的运行情况:
回到Unity
我不想在本教程中深入探讨自己的开发风格,不过我要做的一件事就是将UniRx插件导入Unity中。 UniRx是对.NET Reactive Extensions的重新实现,它针对Unity做了优化处理,而且能很好地兼容iOS IL2CPP。不必过于复杂的实现,它可以简化一些管理NEO和UI的代码。
在 资产(Assets) – > 脚本(Scripts)下创建另一个名为NEOManager的脚本,并复制+粘贴以下代码:
using System.Collections;
using UnityEngine;
using System;
using UniRx;
using Neo.Lux.Core;
using Neo.Lux.Cryptography;
using UnityEngine.UI;
public class NEOManager : MonoBehaviour
{
public NeoAPI API;
[SerializeField] private string RpcIP;
public const string AssetSymbol = "GAS";
[HideInInspector]
public KeyPairReactiveProperty PlayerKeyPair = new KeyPairReactiveProperty();
[SerializeField] private Text addressText;
[SerializeField] private Text balanceText;
public Decimal GASBalance;
private void OnEnable()
{
PlayerKeyPair.Value = KeyPair.FromWIF("KxDgvEKzgSBPPfuVfw67oPQBSjidEiqTHURKSDL1R7yGaGYAeYnr");
#if UNITY_EDITOR
//this.API = new LocalRPCNode(30333, "http://localhost");
this.API = new CustomRPC(30333, 4000, "http://" + RpcIP);
#else
//this.API = NeoRPC.ForTestNet();
this.API = new CustomRPC(30333, 4000, "http://" + RpcIP);
#endif
this.PlayerKeyPair.DistinctUntilChanged().Where(kp => kp != null).Subscribe(keyPair =>
{
this.addressText.text = "Address: " + keyPair.address;
this.balanceText.text = "Balance: Please wait, syncing balance...";
StartCoroutine(SyncBalance());
}).AddTo(this);
}
private IEnumerator SyncBalance()
{
yield return null;
var balances = this.API.GetAssetBalancesOf(this.PlayerKeyPair.Value);
this.GASBalance = balances.ContainsKey(AssetSymbol) ? balances[AssetSymbol] : 0;
this.balanceText.text = "Balance: " + GASBalance.Value.ToString() + " " + AssetSymbol;
}
}
[Serializable]
public class KeyPairReactiveProperty : ReactiveProperty<KeyPair>
{
public KeyPairReactiveProperty() { }
public KeyPairReactiveProperty(KeyPair initialValue) : base(initialValue) { }
}
保存脚本然后返回主场景。 创建一个空的 游戏对象(GameObject),将其命名为NEO,然后创建一个该NEO对象的空的 游戏子对象(child GameObject),并将其命名为NEOManager,并将NEOManager脚本添加到这个NEO对象中。 在检查器 (inspector)中的RpcIP字段旁边输入你的Droplet的IP地址。
接下来,我们将创建一些UI元素并将它们连接到检查器中,这样在连接到主网的时候,我们就可以看到余额的更新。
创建UI画布并向其中添加两个子文本元素,然后单击并将它们的引用拖动到NEOManager的“ (Address Text)”和“(Balance Text)”字段。
单击 播放(Play)按钮然后查看地址和余额的更新情况。
我们当前使用的是在安装私有网络时自动生成的测试账号。 在下一部分中,我们会进行一些设置,以便我们的玩家可以输入他们自己的私钥然后开始与NEO区块链进行交互。
原文链接:https://medium.com/@tbriley/making-a-game-with-neo-unity-part-2-5e1df705ed39
翻译:包子
NEOFANS:neofans.org
NEOFANS 微博:https://www.weibo.com/neofanscommunity
NEOFANS telegram群:https://t.me/NEOfansCN