Unity怎么快速与NEO区块链进行交互

发布时间:2022-01-11 15:35:12 作者:iii
来源:亿速云 阅读:203

这篇文章主要介绍“Unity怎么快速与NEO区块链进行交互”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Unity怎么快速与NEO区块链进行交互”文章能帮助大家解决问题。

钱包管理

我提供这个脚本的原因是为了证明拥有良好入门体验的重要性。许多的加密货币项目(以及一些游戏)都会要求用户进行大量的学习从而学会如何使用这个应用程序。长远上来说,我们需要更好地了解如何引入新用户,同时在这么做的时候尽可能地减少摩擦。用户已经投入时间下载游戏了,当开始要求占用他们更多时间的时候,如果能在开始玩游戏的时候,有着越少的必要的点击操作和学习要求,他们就越不可能立马删除游戏。不要让用户去思考。

理想情况下,我是希望能完全移除第一个界面,只需将用户直接放入游戏中即可。但持有资产的问题是很明显的,你必须非常清楚何时以及如何处理这些资产。当用户忘记或者丢失他们的密钥时,你无法直接进入后台帮助用户重置和检索他们的数据。一个好的中间解决方案是游戏的开始部分不用涉及到任何钱包内容,只有用户想要更好地尝试你的钱包功能时,才会提示用户输入这些钱包信息。希望你们能自行尝试探索自己的解决方案。

发送通证

当玩家得分超过某个阈值时,我们会给他们代币作为奖励。GAS在某种程度上是NEO区块链中的实际代币,所以我们会使用它来作为奖励。

在创建一个真正的游戏时,你将不得不与攻击作斗争,而斗争的同时又要保持游戏的趣味性和经济的流动性并不是一件容易的事情。出于演示的目的,我们在这里会进行简化。在真正的在线游戏中,你需要多种反作弊机制,但最终在游戏中,我们知道我们永远都无法避免所有的攻击。某个地方的某个人会下定决心去破坏你的游戏。否则的话你会遗漏一个关键的代码漏洞。我们试图通过防止最为常见的攻击和睡眠不足来找到平衡,我们经常以这样一种方式分割经济,以便其他玩家的游戏体验不会在这个过程中受到损害。

创建一个名为NEORewardManager的游戏对象GameObject,将它作为其他NEO管理器的子对象。创建一个名为NEORewardManager的脚本并复制粘贴以下代码:

using System;
 using System.Collections;
 using UniRx;
 using UnityEngine;
 
 public class NEORewardManager : MonoBehaviour
 {
     [SerializeField] private NEOManager neoManager;
     [SerializeField] private CompleteProject.PlayerHealth playerHealth;
 
     [SerializeField] private int rewardThreshold = 50;
 
     private bool isGameOver;
 
     private void Update()
     {
         if(playerHealth.currentHealth <= 0 && !isGameOver)
         {
             StartCoroutine(OnGameOver());
             isGameOver = true;
         }
         else if(playerHealth.currentHealth > 0 && isGameOver)
         {
             isGameOver = false;
         }
     }
 
     private IEnumerator OnGameOver()
     {
         yield return new WaitForSeconds(1);
         Time.timeScale = 0;
 
         if(CompleteProject.ScoreManager.score >= rewardThreshold)
         {
             StartCoroutine(TrySendGAS(1));
         }
         else
         {
             Time.timeScale = 1;
         }
     }
 
     private IEnumerator TrySendGAS(int amount)
     {
         yield return null;
 
         try
         {
             var tx = neoManager.API.SendAsset(neoManager.MasterKeyPair, neoManager.PlayerKeyPair.Value.address, NEOManager.AssetSymbol, (decimal)amount);
 
             if (tx == null)
             {
                 Debug.LogError("Null Transaction returned");
                 Time.timeScale = 1;
             }
             else
             {
                 Debug.Log("TX received, checking sync...");
                 Observable.FromCoroutine(SyncBalance).Subscribe().AddTo(this);
             }
         }
         catch (NullReferenceException exception)
         {
             Debug.LogError("There was a problem...");
             Time.timeScale = 1;
         }
         catch (Exception exception)
         {
             Debug.LogError("There was a problem...");
             Time.timeScale = 1;
         }
     }
 
     private IEnumerator SyncBalance()
     {
         yield return null;
 
         try
         {
             //var balances = neoManager.API.GetAssetBalancesOf(neoManager.PlayerKeyPair.Value);
             //neoManager.GASBalance.Value = balances.ContainsKey(NEOManager.AssetSymbol) ? balances[NEOManager.AssetSymbol] : 0;
             //if (Mathf.Approximately((float)NEOManager.GASBalance.Value, GameDataSystem.Coins.Value))
             //{
             //    Debug.Log("GAS transferred successfully");
             //}
             //else
             //{
             //    Debug.LogWarning("Something's not right." +
             //                     //"\nCoins: " + GameDataSystem.Coins.Value +
             //                     "\nGAS: " + NEOManager.GASBalance.Value);
             //}
             Debug.Log("Balance synced!");
             Time.timeScale = 1;
         }
         catch (NullReferenceException exception)
         {
             Debug.LogWarning("Something's not right." +
                  //"\nCoins: " + GameDataSystem.Coins.Value +
                  "\nGAS: " + neoManager.GASBalance.Value);
             Time.timeScale = 1;
         }
     }
 }

系统会等待游戏结束状态,游戏结束后如果玩家得分超过某个特定的阈值,系统就会从主账户中转账GAS到本地玩家账户中。 通过拖放场景中的引用来连接NEOManager和PlayerHealth。 你还可以将奖励阈值设置为你想要的任何值; 玩玩看看。 在随后的回放中,你可以看到数量的更新,这可以反映出GAS已经转账正常了。恭喜,我们现在已经可以与NEO区块链进行一些基本的交互了,耶。

关于“Unity怎么快速与NEO区块链进行交互”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

推荐阅读:
  1. [unity3d]Unity3D与android交互----
  2. unity3D与网页的交互

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

unity neo

上一篇:游戏开发中常见的10种编程语言分别是什么

下一篇:MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》