Gameplay Ingredients是一组用于 Unity 游戏的运行时和编辑器工具:一组脚本的集合,可在制作游戏和原型时简化简单的任务。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

60 行
2.1 KiB

using System.Linq;
using UnityEngine;
using NaughtyAttributes;
namespace GameplayIngredients.Actions
{
public class GameLevelLoadAction : ActionBase
{
public enum Target
{
MainMenu,
First,
Previous,
Current,
Next,
Last,
SpecifiedLevel,
FromGameSave,
}
public bool ShowUI = true;
public Target level = Target.First;
[NonNullCheck, ShowIf("isSpecified"), Tooltip("Which Level to Load/Unload, when selected 'Specified' level")]
public GameLevel specifiedLevel;
[ShowIf("isGameSave")]
public int UserSaveIndex = 0;
[ShowIf("isGameSave")]
public string UserSaveName = "Progress";
[ReorderableList]
public Callable[] OnComplete;
private bool isSpecified() { return level == Target.SpecifiedLevel; }
private bool isGameSave() { return level == Target.FromGameSave; }
public override void Execute(GameObject instigator = null)
{
int index = -2;
var manager = Manager.Get<GameManager>();
switch (level)
{
case Target.MainMenu: index = -1; break;
case Target.First: index = 0; break;
case Target.Last: index = manager.MainGameLevels.Length - 1; break;
case Target.Current: index = manager.currentLevel; break;
case Target.Previous: index = Mathf.Max(0, manager.currentLevel - 1); break;
case Target.Next: index = Mathf.Min(manager.MainGameLevels.Length - 1, manager.currentLevel + 1); break;
case Target.SpecifiedLevel:
if (specifiedLevel != null && manager.MainGameLevels.Contains(specifiedLevel))
{
index = manager.MainGameLevels.ToList().IndexOf(specifiedLevel);
}
break;
case Target.FromGameSave: index = manager.currentSaveProgress; break;
}
manager.SwitchLevel(index, ShowUI, OnComplete);
}
}
}