利用NEO与Unity制作游戏(第2部分)

欢迎来到使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值