我正在尝试进行一个级别选择,该级别选择需要尽可能少的维护,因为我打算添加更新以统一添加更多级别(Unity 场景)。
考虑到这一点,我试图让关卡选择为 Unity Build 设置中的每个关卡创建按钮,然后从预制件创建一个模板对象,它可以在其中映射它创建的按钮。
我让它大部分工作,但由于某种原因,它以错误的顺序映射按钮,我试图从下到上,Unity 似乎正在抓取 Gameobjects 是随机顺序。
这是我的代码:
private Scene[] levels;
private int currentButtonId = 1;
public Transform buttonsHolder;
public GameObject buttonPrefab;
public GameObject buttonSlotsPrefab;
private GameObject[] levelButtonSlots;
private int currentLevelSlot = 0;
private int numSlotsToMove = 0;
private void Start()
{
var sceneCount = SceneManager.sceneCountInBuildSettings;
levels = new Scene[sceneCount];
for (var i = 0; i < sceneCount; i++)
{
// Beginning Setup
levels[i] = SceneManager.GetSceneByBuildIndex(i);
// Look for Level Placement Slots
levelButtonSlots = GameObject.FindGameObjectsWithTag("Level Slot");
// If there aren't enough Level Placement Slots make more by creating a template
if(levelButtonSlots.Length < levels.Length)
{
GameObject buttonSlots = Instantiate(buttonSlotsPrefab);
buttonSlots.transform.position = new Vector2(0, 10 * numSlotsToMove);
numSlotsToMove++;
}
// Go get those new placement slots
levelButtonSlots = GameObject.FindGameObjectsWithTag("Level Slot");
// Create Button
GameObject currentButton = Instantiate(buttonPrefab, buttonsHolder);
// Move it to the next slot
currentButton.transform.position = levelButtonSlots[currentLevelSlot].transform.position;
currentLevelSlot++;
// Add Text to a new button
TextMeshProUGUI buttonText = currentButton.GetComponentInChildren<TextMeshProUGUI>();
buttonText.text = (currentButtonId.ToString());
// Setup what which scene clicking a button will do
ButtonManager buttonScript = currentButton.GetComponentInChildren<ButtonManager>();
buttonScript.sceneToLoad = currentButtonId;
currentButtonId++;
}
}
该buttonsHolder
变量在编辑器中设置并且是画布。这buttonPrefab
是我在编辑器中设置的 TextMeshPro 按钮预制件,它有level Buttons
标签和一个简单的脚本,点击时会加载指定的场景。这buttonSlotsPrefab
是我在编辑器中设置的一个游戏对象预制件,它有Button Placement Slot
标签,它包含 8 个其他空游戏对象,每个都有level slot
标签,我使用这 8 个对象作为运行时按钮应该放置在哪里的指南。
同样,我的目标是从下到上放置按钮,但是 Unity 在运行时会无缘无故地吐出这个:
对于某些变量的命名约定,我感到很抱歉,我已经连续两天感到疲倦和压力了。一旦我开始工作,我会解决这些问题。
经过进一步测试,我注意到当我第一次创建时buttonSlotPrefab
,一切正常,但是,在重新启动 Unity(不更改任何文件)后,当我在重新启动后再次运行游戏时,顺序会随机化。这可能是 Unity 引擎中的错误吗?