| outline | deep |
|---|
本页详细介绍了 LevelLoader 模组的运行时 API,帮助开发者更好地理解和使用 LevelLoader 的核心功能。
LevelEntity 是 LevelLoader 的核心数据结构,用于定义和存储自定义关卡的所有属性。
using System;
using UnityEngine;
namespace LevelLoader
{
public struct LevelEntity
{
public LevelType LevelType { get; set; }
public int LevelNum { get; set; }
public string LevelName { get; set; }
public string LevelNameEn { get; set; }
public PlantType LevelPlantType { get; set; }
public Sprite LevelSprite { get; set; }
public SceneType SceneType { get; set; }
public GameObject ScenePrefab { get; set; }
public int MaxWave { get; set; }
public System.Collections.Generic.List<ZombieType> ZombieTypes { get; set; }
public int[,] MapRoadTypes { get; set; }
public Action EnterAction { get; set; }
}
}- 类型:
LevelType(枚举) - 描述: 定义关卡的类型,如主线关卡、支线关卡、生存模式等
- 示例值:
MainStory,Survival,MiniGame
- 类型:
int - 描述: 关卡的编号,用于在关卡列表中排序
- 示例值:
1,2,10
- 类型:
string - 描述: 关卡的中文名称
- 示例值:
"草地关卡","屋顶关卡"
- 类型:
string - 描述: 关卡的英文名称
- 示例值:
"Grass Level","Roof Level"
- 类型:
PlantType(枚举) - 描述: 关卡允许使用的植物类型
- 示例值:
Basic,Advanced,All
- 类型:
UnityEngine.Sprite - 描述: 关卡在选择界面中显示的图标
- 示例: 自定义的关卡缩略图
- 类型:
SceneType(枚举) - 描述: 关卡的场景类型,如草地、泳池、屋顶等
- 示例值:
Grass,Pool,Roof
- 类型:
UnityEngine.GameObject - 描述: 关卡场景的预制体
- 示例: 包含地图、背景和基本配置的GameObject
- 类型:
int - 描述: 关卡的最大波数
- 示例值:
5,10,20
- 类型:
List<ZombieType> - 描述: 关卡中会出现的僵尸类型列表
- 示例值:
new List<ZombieType> { ZombieType.Normal, ZombieType.Conehead, ZombieType.Buckethead }
- 类型:
int[,] - 描述: 关卡地图的道路类型矩阵
- 示例:
new int[,] { { 1, 2 }, { 3, 4 } },其中每个数字代表不同的道路类型
- 类型:
System.Action - 描述: 进入关卡时触发的回调函数
- 示例: 用于初始化关卡特定逻辑的委托
定义关卡的类型:
public enum LevelType
{
Nothing = -1, // 无类型
Advanture = 0, // 冒险模式
Challenge = 1, // 挑战模式
IZ = 2, // 无限模式
Survival = 3, // 生存模式
Explore = 4, // 探索模式
TravelAdvanture = 5, // 旅行冒险
SkinLevel = 6, // 皮肤关卡
AbyssLevel = 7, // 深渊关卡
NewAdvanture = 8, // 新冒险模式
TowerLevel = 9 // 塔防模式
}定义关卡的场景类型:
public enum SceneType
{
Day = 0, // 白天场景
Night = 1, // 夜晚场景
Pool = 2, // 泳池场景
NightPool = 3, // 夜晚泳池
Roof = 4, // 屋顶场景
NightRoof = 5, // 夜晚屋顶
Day_6 = 6, // 白天场景_6
Night_6 = 7, // 夜晚场景_6
SuperDay = 8, // 超级白天
SuperPool = 9, // 超级泳池
Travel_roof = 10, // 旅行屋顶
Test_green = 11, // 测试绿色场景
Travel_roof_dusk = 12, // 旅行屋顶黄昏
Travel_roof_night = 13, // 旅行屋顶夜晚
MidDay = 14, // 中午
BilliardBallDay = 15, // 台球白天
BilliardBallMidDay = 16, // 台球中午
PVPScaryPot = 17, // PVP恐怖花盆
Snow = 18, // 雪地场景
Chess = 19, // 棋盘场景
Snow_6 = 20, // 雪地场景_6
ReversalPool = 21, // 反转泳池
BigPool = 22, // 大泳池
Roof_Pool = 23, // 屋顶泳池
River = 24, // 河流场景
IZDay = 25, // 无限模式白天
SnowPool = 26, // 雪地泳池
LongMap = 27, // 长地图
TreasureBeach = 28, // 宝藏海滩
MidMap = 29, // 中地图
LavaBeach = 30, // 熔岩海滩
NormalBeach = 31, // 普通海滩
SnowPool_night = 32, // 夜晚雪地泳池
RoofPool_dusk = 33, // 屋顶泳池黄昏
RoofPool_night = 34, // 屋顶泳池夜晚
Day_bubble = 35 // 气泡白天
}定义地图中地块的类型:
public enum BoxType
{
Grass = 0, // 草地
Water = 1, // 水域
Dirt = 2, // 泥土
Roof = 3, // 屋顶
Stone = 4, // 石头
River = 5, // 河流
Dirt_water = 6 // 泥水域
}Tools 类提供了一系列便捷方法,用于资源加载和关卡管理,是 LevelLoaderAPI 的简化封装。
- 签名:
public static void RegisterLevel(LevelEntity levelEntity) - 描述: 注册关卡实体到关卡管理系统中
- 参数:
levelEntity- 要注册的关卡实体实例 - 异常:
ArgumentNullException: 当 levelEntity 为 null 时抛出ArgumentException: 当关卡编号小于等于0或关卡名称为空时抛出InvalidOperationException: 当关卡编号已存在时抛出
- 使用示例:
// 创建关卡实体 var level = new LevelEntity { LevelNum = 1, LevelName = "新手教学" }; // 注册到系统 Tools.RegisterLevel(level);
- 注意:
- 同一关卡编号只能注册一次,重复注册将被忽略
- 签名:
public static AssetBundle LoadAssetBundle(string base64String, string path = null, string resourceName = null) - 描述: 从多种来源加载AssetBundle资源
- 参数:
base64String: AssetBundle的Base64编码字符串,优先使用此来源path: AssetBundle文件路径,当Base64字符串为空或无效时使用resourceName: 程序集内嵌资源名称,当其他来源都失败时使用
- 返回值: 加载成功的AssetBundle对象,如果所有来源都失败则返回null
- 使用示例:
// 从Base64加载 AssetBundle bundle1 = Tools.LoadAssetBundle(base64Data); // 从文件路径加载 AssetBundle bundle2 = Tools.LoadAssetBundle(null, "C:/bundles/myBundle"); // 使用默认内嵌资源 AssetBundle bundle3 = Tools.LoadAssetBundle(null,null,"AssemblyName.resourceName");
- 签名:
public static Sprite LoadSpriteFromBase64(string base64String) - 描述: 从Base64字符串解码并创建Sprite对象
- 参数:
base64String- 图像数据的Base64编码字符串,支持常见的图像格式(如PNG、JPG等) - 返回值: 成功加载时返回Sprite对象,加载失败时返回null
- 使用示例:
// 从Base64字符串加载精灵 Sprite mySprite = Tools.LoadSpriteFromBase64("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="); if (mySprite != null) { image.sprite = mySprite; }
- 签名:
public static Sprite LoadSpriteFromFile(string filePath) - 描述: 从本地文件系统加载图像文件并创建Sprite对象
- 参数:
filePath- 图像文件的完整路径,支持常见的图像格式(如PNG、JPG等) - 返回值: 成功加载时返回Sprite对象,文件不存在或加载失败时返回null
- 使用示例:
// 从文件路径加载精灵 Sprite mySprite = Tools.LoadSpriteFromFile("C:/Images/myImage.png"); if (mySprite != null) { image.sprite = mySprite; }
- 签名:
public static async System.Threading.Tasks.Task<string> DownloadAndConvertToBase64Async(string url) - 描述: 异步下载文件并转换为Base64字符串
- 参数:
url- 要下载的文件URL - 返回值: 下载并转换后的Base64字符串,如果失败则返回null
- 使用示例:
// 异步下载并转换为Base64 string base64Image = await Tools.DownloadAndConvertToBase64Async("https://example.com/image.png"); if (!string.IsNullOrEmpty(base64Image)) { Sprite sprite = Tools.LoadSpriteFromBase64(base64Image); }
- 合理组织关卡数据: 使用脚本ableObject或JSON文件存储关卡配置,便于管理和修改
- 优化场景资源: 确保关卡场景预制体经过优化,避免过大的资源消耗
- 合理设置波次: 根据关卡难度和游戏节奏,合理设置最大波数
- 利用EnterAction: 使用EnterAction回调函数初始化关卡特定的逻辑和资源
- 测试兼容性: 在不同设备和配置下测试自定义关卡,确保兼容性和稳定性
- 确保为每个关卡提供唯一的LevelNum,避免冲突
- 关卡图标(LevelSprite)建议使用256x256像素的图片,以获得最佳显示效果
- MapRoadTypes矩阵的维度应与关卡场景的地图大小匹配
- 避免在EnterAction中执行过多耗时操作,以免影响游戏体验
- 确保ScenePrefab包含必要的组件和脚本,如地图管理器、波次控制器等