元宇宙是整合多种新技术而产生的新型虚实相融的互联网应用和社会形态,它基于扩展现实技术提供沉浸式体验,以及数字孪生技术生成现实世界的镜像,通过区块链技术搭建经济体系
GameFi项目包含五大关键要素:
1.区块链网络:GameFi的基础设施一般为公链。目前链游采用的主流链包括BSC(币安智能链)、Ronin(AxieInfinity自研链)、WAX(专注链游与NFT)和Polygon(以太坊原生Layer2)。
2.游戏玩法与模式:目前GameFi的设计普遍较简单,以土地模拟经营、卡牌对战、moba为主。
3.游戏通证:通证体系一般分为单通证与多通证模式:(1)单通证:游戏中所有的支出收益均采用同一种货币;(2)多通证:游戏经济活动采用多种代币运行
4.经济模型:经济模型是GameFi的核心
一、Unity关卡
Unity使用过程中关卡加载和卸载是大多数三维引擎都要提供的基本功能。
因为关卡切换在游戏中非常常用。
在之前的版本中Unity的关卡切换使用的是:
Application.loadedLevel();
看看Application类,此时这个类的功能比较繁杂,比较多。只看与关卡相关的:
[Obsolete("Use SceneManager.LoadScene")]
public static void LoadLevel(string name);
[Obsolete("Use SceneManager.LoadScene")]
public static void LoadLevel(int index);
[Obsolete("Use SceneManager.LoadScene")]
public static void LoadLevelAdditive(string name);
[Obsolete("Use SceneManager.LoadScene")]
public static void LoadLevelAdditive(int index);
//
//摘要:
/////
//Unloads all GameObject associated with the given scene.Note that assets are
//currently not unloaded,in order to free up asset memory call Resources.UnloadAllUnusedAssets.
/////
//
//参数:
//index:
//Index of the scene in the PlayerSettings to unload.
//
//scenePath:
//Name of the scene to Unload.
//
//返回结果:
/////
//Return true if the scene is unloaded.
/////
[Obsolete("Use SceneManager.UnloadScene")]
public static bool UnloadLevel(string scenePath);
//
//摘要:
/////
//Unloads all GameObject associated with the given scene.Note that assets are
//currently not unloaded,in order to free up asset memory call Resources.UnloadAllUnusedAssets.
/////
//
//参数:
//index:
//Index of the scene in the PlayerSettings to unload.
//
//scenePath:
//Name of the scene to Unload.
//
//返回结果:
/////
//Return true if the scene is unloaded.
/////
[Obsolete("Use SceneManager.UnloadScene")]
public static bool UnloadLevel(int index);
二、Untiy的SceneManager类
#region程序集UnityEngine,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null
//H:UnityUnityProjectShiftLevelsLibraryUnityAssembliesUnityEngine.dll
#endregion
using UnityEngine.Internal;
namespace UnityEngine.SceneManagement
{
//
//摘要:
/////
//Scene management at run-time.
/////
public class SceneManager
{
public SceneManager();
public static int sceneCount{get;}
//
public static int sceneCountInBuildSettings{get;}
public static Scene GetActiveScene();
public static Scene[]GetAllScenes();
//参数:
//index:
//Index of the scene to get.Index must be greater than or equal to 0 and less
//than SceneManager.sceneCount.
public static Scene GetSceneAt(int index);
//返回结果:
/////
//The scene if found or an invalid scene if not.
/////
public static Scene GetSceneByName(string name);
//Searches all scenes added to the SceneManager for a scene that has the given
//asset path.
/////
//
//参数:
//scenePath:
//Path of the scene.Should be relative to the project folder.Like:"AssetsMyScenesMyScene.unity".
public static Scene GetSceneByPath(string scenePath);
[ExcludeFromDocs]
public static void LoadScene(int sceneBuildIndex);
[ExcludeFromDocs]
public static void LoadScene(string sceneName);
//参数:
//sceneName:
//Name of the scene to load.
//
//sceneBuildIndex:
//Index of the scene in the Build Settings to load.
//
//mode:
//Allows you to specify whether or not to load the scene additively.See SceneManagement.LoadSceneMode
//for more information about the options.
public static void LoadScene(int sceneBuildIndex,[DefaultValue("LoadSceneMode.Single")]LoadSceneMode mode);
//参数:
//sceneName:
//Name of the scene to load.
//
//sceneBuildIndex:
//Index of the scene in the Build Settings to load.
//
//mode:
//Allows you to specify whether or not to load the scene additively.See SceneManagement.LoadSceneMode
//for more information about the options.
public static void LoadScene(string sceneName,[DefaultValue("LoadSceneMode.Single")]LoadSceneMode mode);
[ExcludeFromDocs]
public static AsyncOperation LoadSceneAsync(int sceneBuildIndex);
[ExcludeFromDocs]
public static AsyncOperation LoadSceneAsync(string sceneName);
//参数:
//sceneName:
//Name of the scene to load.
//
//sceneBuildIndex:
//Index of the scene in the Build Settings to load.
//
//mode:
//If LoadSceneMode.Single then all current scenes will be unloaded before loading.
public static AsyncOperation LoadSceneAsync(int sceneBuildIndex,[DefaultValue("LoadSceneMode.Single")]LoadSceneMode mode);
//参数:
//sceneName:
//Name of the scene to load.
//
//sceneBuildIndex:
//Index of the scene in the Build Settings to load.
//
//mode:
//If LoadSceneMode.Single then all current scenes will be unloaded before loading.
public static AsyncOperation LoadSceneAsync(string sceneName,[DefaultValue("LoadSceneMode.Single")]LoadSceneMode mode);
//
//参数:
//sourceScene:
//The scene that will be merged into the destination scene.
//
//destinationScene:
//Existing scene to merge the source scene into.
public static void MergeScenes(Scene sourceScene,Scene destinationScene);
//
//摘要:
/////
//Move a GameObject from its current scene to a new scene.///It is required that
//the GameObject is at the root of its current scene.
/////
//
//参数:
//go:
//GameObject to move.
//
//scene:
//Scene to move into.
public static void MoveGameObjectToScene(GameObject go,Scene scene);
//
//返回结果:
/////
//Returns false if the scene is not loaded yet.
/////
public static bool SetActiveScene(Scene scene);
/////
public static bool UnloadScene(string sceneName);
//
//摘要:
/////
//Unloads all GameObjects associated with the given scene.Note that assets are
//currently not unloaded,in order to free up asset memory call Resources.UnloadAllUnusedAssets.
/////
//
//参数:
//sceneBuildIndex:
//Index of the scene in the Build Settings to unload.
//
//sceneName:
//Name of the scene to unload.
//
//返回结果:
/////
//Returns true if the scene is unloaded.
/////
public static bool UnloadScene(int sceneBuildIndex);
}
}
三、SceneManager对于获取场景的一些操作
(一)
SceneManager
class in UnityEngine.SceneManagement
描述:运行时的场景管理。
静态变量sceneCount:当前加载的场景的总数。
前加载的场景的数量将被返回。
sceneCountInBuildSettings:在BuildSettings的号码。
(二)
CreateScene:在运行时创建一个空的新场景,使用给定的名称。
在运行时创建一个空的新场景,使用给定的名称。
新的场景将开放相加到层次与现有已经打开的场景。新场景的路径将是空的。此函数用于在运行时创建场景。创建一个场景编辑时间(例如,使编辑脚本或工具需要创建场景时),使用editorscenemanager.newscene。
(三)
public static SceneManagement.Scene GetActiveScene()
现场的活动场景。
描述:获取当前活动场景。
当前活动的场景将被用来作为目标由脚本实例化新的游戏对象现场。
using UnityEngine;
using UnityEngine.SceneManagement;
public class GetActiveSceneExample:MonoBehaviour
{
void Start()
{
Scene scene=SceneManager.GetActiveScene();
Debug.Log("Active scene is'"+scene.name+"'.");
}
}
(四)
public static SceneManagement.Scene GetSceneAt(int index);
index:场景索引。指数必须大于或等于0和小于scenemanager.scenecount。
返回:
根据给定的参数返回一个场景引用。
获取现场在添加场景的场景管理器的列表索引:
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;
using UnityEngine;
public class Example
{
//adds a menu item which gives a brief summary of currently open scenes
[MenuItem("SceneExample/Scene Summary")]
public static void ListSceneNames()
{
string output="";
if(SceneManager.sceneCount>0)
{
for(int n=0;n<SceneManager.sceneCount;++n)
{
Scene scene=SceneManager.GetSceneAt(n);
output+=scene.name;
output+=scene.isLoaded?"(Loaded,":"(Not Loaded,";
output+=scene.isDirty?"Dirty,":"Clean,";
output+=scene.buildIndex>=0?"in build)n":"NOT in build)n";
}
}
else
{
output="No open scenes.";
}
EditorUtility.DisplayDialog("Scene Summary",output,"Ok");
}
}