unity 多个预制体 多个按钮 点击按钮加载预制体 点另一个按钮 加载另一个预制体 替换上一个加载的预制体
时间: 2023-09-28 21:12:45 浏览: 173
好的,这个问题跟之前的问题类似,不同之处在于我们需要为每个预制体都创建一个对应的按钮,并且支持多个预制体和多个按钮的切换。我们可以使用一个字典来存储所有的预制体和对应的按钮,在点击按钮时根据按钮的名称来加载对应的预制体。
下面是一个简单的示例代码,你可以在其中进行修改以适应你的具体需求:
```csharp
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LoadPrefab : MonoBehaviour
{
public Dictionary<string, GameObject> prefabDict = new Dictionary<string, GameObject>();
public Dictionary<string, Button> buttonDict = new Dictionary<string, Button>();
private GameObject currentPrefab;
private Button currentButton;
public void AddPrefab(string name, GameObject prefab)
{
prefabDict[name] = prefab;
}
public void AddButton(string name, Button button)
{
buttonDict[name] = button;
button.onClick.AddListener(() => LoadPrefabByName(name));
}
public void LoadPrefabByName(string name)
{
if (prefabDict.ContainsKey(name))
{
if (currentPrefab != null)
{
Destroy(currentPrefab);
}
currentPrefab = Instantiate(prefabDict[name]);
currentButton = buttonDict[name];
}
}
public void LoadNextPrefab()
{
if (currentButton != null)
{
int index = (currentButton.transform.GetSiblingIndex() + 1) % transform.childCount;
LoadPrefabByName(transform.GetChild(index).name);
}
}
}
```
在这个示例代码中,我们创建了两个公共变量 `prefabDict` 和 `buttonDict`,分别用于存储所有的预制体和对应的按钮。我们还声明了两个私有变量 `currentPrefab` 和 `currentButton`,分别用于跟踪当前加载的预制体和对应的按钮。
我们创建了两个公共函数 `AddPrefab` 和 `AddButton`,分别用于向字典中添加预制体和按钮。在 `AddButton` 函数中,我们使用 `AddListener()` 函数来为按钮添加点击事件,并且在点击事件中调用 `LoadPrefabByName()` 函数来加载对应的预制体。
在 `LoadPrefabByName` 函数中,我们首先检查字典中是否包含指定名称的预制体。如果包含,则销毁当前预制体并实例化新的预制体。最后将当前按钮赋值给 `currentButton` 变量。
在 `LoadNextPrefab` 函数中,我们首先检查当前按钮是否存在。如果存在,则获取下一个按钮的索引值,并且调用 `LoadPrefabByName()` 函数来加载对应的预制体。
你可以将这个脚本挂载到你的按钮父对象上,并且在 Inspector 窗口中将所有预制体和按钮添加到字典中。每个按钮的名称应该与对应的预制体名称相同。你还需要为每个按钮设置一个唯一的名称,例如使用数字或字母来标识。
希望这个示例对你有所帮助!
阅读全文