单击按钮时生成游戏对象并从纹理数组设置它们的图像 - Unity 4.6(使用 uGUI)
Generate GameObjects and set their image from an Array of Textures when a button is clicked - Unity 4.6 (using uGUI)
我在尝试开发一个加载器时遇到了很多麻烦,当一个按钮被点击时,它需要一组纹理并将它们填充到网格布局中(当另一个按钮被点击时,它会删除当前纹理并用一组新的纹理替换它们)。我对 UI 的网格布局部分进行了完全排序并生成了纹理数组,我只需要帮助:
- 将每个纹理分配给单独生成的游戏对象的图像组件。
- 用这些游戏对象填充网格布局。
任何人都可以分享一些代码见解或代码片段来解决问题吗?
首先在 Canvas
中创建脚本或使用脚本创建空的 GameObject
。
创建public个变量:
public Sprite[] mySprites;
public GameObject myGridLayoutGameObject;
public GameObject myGridElement;
在 mySprites
中通过编辑器分配所有精灵。
对于 myGridLayoutGameObject
,将您的 GUI GameObject 分配给 GridLayoutGroup
。
对于 myGridElement
,您必须使用图像创建原型 GUI 对象并将其放置在您的 canvas 之外,以使其对您的相机不可见。将其分配给您的脚本变量。
然后你可以创建一些方法:
public void fillGrid() {
foreach (Sprite sprite in mySprites) {
GameObject instance = Instantiate(myGridElement, myGridElement.transform.position, myGridElement.transform.rotation) as GameObject;
instance.GetComponent<Image>().sprite = sprite;
instance.transform.SetParent(myGridLayoutGameObject.transform);
}
}
它会根据您的设置自动将所有对象放置在网格内。不要忘记在脚本开头添加 using UnityEngine.UI;。
此外,我为 Unity 5 编写了这段代码。Unity 4.6 在 GUI 元素上可能有一些差异。
我在尝试开发一个加载器时遇到了很多麻烦,当一个按钮被点击时,它需要一组纹理并将它们填充到网格布局中(当另一个按钮被点击时,它会删除当前纹理并用一组新的纹理替换它们)。我对 UI 的网格布局部分进行了完全排序并生成了纹理数组,我只需要帮助:
- 将每个纹理分配给单独生成的游戏对象的图像组件。
- 用这些游戏对象填充网格布局。
任何人都可以分享一些代码见解或代码片段来解决问题吗?
首先在 Canvas
中创建脚本或使用脚本创建空的 GameObject
。
创建public个变量:
public Sprite[] mySprites;
public GameObject myGridLayoutGameObject;
public GameObject myGridElement;
在 mySprites
中通过编辑器分配所有精灵。
对于 myGridLayoutGameObject
,将您的 GUI GameObject 分配给 GridLayoutGroup
。
对于 myGridElement
,您必须使用图像创建原型 GUI 对象并将其放置在您的 canvas 之外,以使其对您的相机不可见。将其分配给您的脚本变量。
然后你可以创建一些方法:
public void fillGrid() {
foreach (Sprite sprite in mySprites) {
GameObject instance = Instantiate(myGridElement, myGridElement.transform.position, myGridElement.transform.rotation) as GameObject;
instance.GetComponent<Image>().sprite = sprite;
instance.transform.SetParent(myGridLayoutGameObject.transform);
}
}
它会根据您的设置自动将所有对象放置在网格内。不要忘记在脚本开头添加 using UnityEngine.UI;。
此外,我为 Unity 5 编写了这段代码。Unity 4.6 在 GUI 元素上可能有一些差异。