创建一个 Resources.Load 变量以用于多个按钮

Creating a Resources.Load variable to use with multiple buttons

好的,我被困在这个问题上有一段时间了,我需要一些见解。我正在尝试创建一个小脚本,我可以将其附加到一个按钮上,该按钮在按下时会实例化一个图像。我对如何在编辑器中创建一个 public GameObject 字段感到困惑,我可以在其中将一个独特的图像预制件拖到编辑器中(对于每个按钮)。我现在迷路了。我最初在 Resources.Load() 中用显式预制件编写它,但现在我需要将它抽象化,以便我可以将它与几十个按钮一起使用。

Vector3 symbolScale = new Vector3(1.0f, 1.0f, 1.0f);
public GameObject symbolPrefabObj = Resources.Load(symbolPrefab);
GameObject symbolCharacter;


public void OnPointerClick (PointerEventData eventData)
{
    // Instantiate an object on Click
    symbolCharacter = Instantiate(symbolPrefabObj, new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
    symbolCharacter.transform.parent = GameObject.FindGameObjectWithTag("MessagePanel").transform;
    symbolCharacter.transform.localScale = symbolScale;
}

这是我编写的原始代码(如下),它适用于单个实例,但正如我提到的,我想将这段代码放到几十个按钮上,并在编辑器中为每个按钮分配不同的图像预制件.

Vector3 symbolScale = new Vector3(1.0f, 1.0f, 1.0f);
GameObject symbolCharacter;

#region IPointerClickHandler implementation

public void OnPointerClick (PointerEventData eventData)
{
    // Instantiate an object on Click
    symbolCharacter = Instantiate(Resources.Load ("Prefabs/Symbols/SymbolImage1"), new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
    symbolCharacter.transform.parent = GameObject.FindGameObjectWithTag("MessagePanel").transform;
    symbolCharacter.transform.localScale = symbolScale;
}

也许是这样:

public string imageName;

symbolCharacter = Instantiate(Resources.Load (Path.Combine("Prefabs/Symbols", imageName)), new Vector3(0, 0, 0), Quaternion.identity) as GameObject;

现在您可以将此脚本附加到许多具有不同图像名称的游戏对象,因为 imageName 是一个 public 变量。