细讲NFT链游系统开发的原理讲解(成熟方案)丨及链游NFT铸造模式系统开发方案详细分析(理论制定)

2022-07-25 13:54:44 浏览数 (1)

  元宇宙技术在传统互联网的基础上,元宇宙在沉浸感、参与度、永续性等多方面提出了更高的要求,因此将会由许多独立工具、平台、基础设施、协议等来支持其运行。随着AR、VR、5G、云计算等技术成熟度提升,元宇宙有望逐步从概念走向现实。

  When it comes to the composition of the metauniverse,the industry generally adopts the eight elements proposed by roblox,namely identity,social interaction,immersion,low latency,diversity,anytime,anywhere,economic system and civilization.Undoubtedly,to achieve these eight elements perfectly,the metauniverse must be built on advanced digital infrastructure.

  元宇宙秩序讲解分析逻辑

  (1)循序渐进是元宇宙的主要过程,其中在技术端、内容端、载体端都随着时代的发展而在不断演变。关于将区块链应用变得如何丰富化这个问题以太坊正在努力改进中,同样的Coinbase、Uniswap以及Opesea为代表的交易所也在为区块链经济提供更好的交易能力,他们的发展始终在遵循自然规律,循序渐进的发展。

  (2)内容端,元宇宙这一概念在游戏中不断增加,其生态形式也不断加强,当然用户数也随之增长。本文由系统开发对接唯:StPv888编辑整理发布。尤其是以Roblox、Sandbox为代表的UGC元宇宙概念,确保游戏得益于玩家的参与而不断丰富自己游戏的内容。

  (3)载体端,比较明显的表现是在通信技术、虚拟现实以及芯片等底层技术的改进和升级中。

  Metauniverse is essentially a process of virtualizing and digitizing the real world,which requires a large number of transformations of content

  元宇宙的开发技术原理分析

  在技术视角下,技术意义的「元宇宙」包括了内容系统、区块链系统、显示系统、操作系统,最终展现为超越屏幕限制的3D界面,所代表的是继PC时代、移动时代之后的全息平台时代。支持「元宇宙」的技术集群包括5个板块:

  其一,Network and computing technology:including spatial positioning algorithm,virtual scene fitting,real-time network transmission,GPU server,edge computing,reducing costs and network congestion;

  其二,artificial intelligence;

  其三,Electronic game technology:such as game engine supporting game program code and resources(image,sound,animation);

  其四,Display technology:VR,AR,Mr,especially XR,continuous iterative upgrading,virtual immersive reality experience ladder,and constantly deepening perceptual interaction;

  其五,Blockchain Technology:through smart contracts,decentralized clearing and settlement platforms and value transmission mechanisms,ensure the ownership and circulation of value,and realize the stability,efficiency,transparency and certainty of the operation of the economic system

  秩序Python链游执行lua代码

  这里将分三个步骤:

  加载lua代码到vm中,对应api-luaL_loadbuffe

  luaL_loadbuffer会同时在栈上压入代码块的指针

  执行lua代码,对应api-lua_pcall

  lua_pcall会从栈上依次弹出{nargs}个数据作为函数参数,再弹出函数进行执行,并将结果压入栈

  如果lua代码有返回值,那么通过lua_toXXX相关api从栈上获取结果

  完整的代码如下:

  private bool DoLuaCode(System.IntPtr L,string luaCode){

  //加载lua代码

  if(Lua.luaL_loadbuffer(L,luaCode,"")==0){

  //执行栈顶的函数

  if(Lua.lua_pcall(L,0,1,0)==0){

  //函数执行完成后,返回值会依次押入栈

  return true;

  }else{

  Debug.LogError("pcall failed!");

  return false;

  }

  }else{

  Debug.LogError("load buffer failed");

  return false;

  }

  }

  假如我们有一段lua代码:

  return'hello,i am from lua'

  这段lua仅仅返回一段字符串,那么利用DoLuaCode去执行就是:

  //lua代码

  string luaCode="return'hello,i am from lua'";

  if(DoLuaCode(L,luaCode)){

  Debug.Log(Lua.lua_tostring(L,-1));

  //lua_toXXX不会出栈,需要lua_pop才能出栈

  Lua.lua_pop(L,1);

  }

  由于此处lua代码返回的是字符串,因此使用lua_tostring(L,-1)来将栈顶的元素转为字符串并返回,相应的我们还能看到有lua_tonumber,lua_toboolean等等.

  4.c#调用lua全局函数

  接下来的例子将说明一下c#端如何执行lua中的全局函数。

  假设现在我们有一段lua代码如下:

  function addSub(a,b)

  return a b,a-b;

  end

  通过DoLuaCode来运行以上的lua代码,就得到了一个全局的addSub函数,这个函数会返回a,b相加和相减的结果。

  为了在c#端执行以上的lua函数,需要按以下步骤进行:

  将全局函数压入栈中,对应api-lua_getglobal

  将函数所需的参数依次压入栈中,对应api-lua_pushnumbe

  执行栈中函数,对应api-lua_pcall

  获取函数返回结果,对应api-lua_tonumbe

  完整c#代码如下:

  //从全局表里读取addSub函数,并压入栈

  Lua.lua_getglobal(L,"addSub");

  //压入参数a

  Lua.lua_pushnumber(L,101);

  //压入参数b

  Lua.lua_pushnumber(L,202);

  //2个参数,2个返回值

  Lua.lua_pcall(L,2,2,0);

  //pcall会让参数和函数指针都出栈

  //pcall执行完毕后,会将结果压入栈

  Debug.Log(Lua.lua_tonumber(L,-2));

  Debug.Log(Lua.lua_tonumber(L,-1));

  Lua.lua_pop(L,2);

  5.lua注册并调用c#静态函数

  首先,想要被Lua调用的c#函数,都必须满足以下的格式:

  public delegate int LuaCSFunction(System.IntPtr luaState);

  同时需要加上特性:

  MonoPInvokeCallback(typeof(LuaCSFunction))

  我们可以通过以下方式,将一个LuaCSFunction注册到lua中:

  static void RegisterCSFunctionGlobal(System.IntPtr L,string funcName,LuaCSFunction func){

  //将LuaCSFunction压入栈中

  Lua.lua_pushcfunction(L,func);

  //lua_setglobal会弹出栈顶元素,并按给定的名字作为key将其加入到全局表

  Lua.lua_setglobal(L,funcName);

  }

0 人点赞