在自定义编辑器检查器中的多个 GUILayout 按钮上加载不同的纹理
Loading different textures on multiple GUILayout buttons in custom editor inspector
我正在制作一个自定义编辑器,我想在 3 个单独的 GUILayout 按钮上加载 3 个单独的纹理(图标图像),但很难做到。让我解释一下:我正在从 Resources/Prefabs 文件夹加载 3 个预制件,然后我为每个预制件分配一个 GUILayout 按钮,就像这样:
Object[] obj = Resources.LoadAll("Prefabs", typeof(GameObject));
objects = new GameObject[obj.Length];
for (int i = 0; i < obj.Length; i++)
{
objects[i] = (GameObject)obj[i];
}
if (objects != null)
{
for (int j = 0; j < obj.Length; j++)
{
if (GUILayout.Button("", GUILayout.Width(70), GUILayout.Height(70)))
{
selectedObject = objects[j];
}
}
}
如何为每个按钮加载单独的纹理? 纹理位于 Resources/Textures 文件夹中。
提前致谢!
为什么不使用 GUILayout.Button
的适当重载?你应该看看 GUILayout.Button
.
的文档
例如,
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(ScriptName))]
public class ExampleOnInspector : Editor
{
public Texture[] icons;
void Awake()
{
//Load textures into icons by `AssetDatabase.LoadAssetAtPath<T>(assetPath)`
}
public override void OnInspectorGUI()
{
if (GUILayout.Button(icons[0]))
Debug.Log("Clicked the icon 0");
if (GUILayout.Button(icons[1]))
Debug.Log("Clicked the icon 1");
if (GUILayout.Button(icons[2]))
Debug.Log("Clicked the icon 2");
}
}
PS:
如果您的纹理仅用于编辑器脚本,我建议您 put them in Assets/Editor Default Resources
。否则它们将包含在您的运行时资源中。
我正在制作一个自定义编辑器,我想在 3 个单独的 GUILayout 按钮上加载 3 个单独的纹理(图标图像),但很难做到。让我解释一下:我正在从 Resources/Prefabs 文件夹加载 3 个预制件,然后我为每个预制件分配一个 GUILayout 按钮,就像这样:
Object[] obj = Resources.LoadAll("Prefabs", typeof(GameObject));
objects = new GameObject[obj.Length];
for (int i = 0; i < obj.Length; i++)
{
objects[i] = (GameObject)obj[i];
}
if (objects != null)
{
for (int j = 0; j < obj.Length; j++)
{
if (GUILayout.Button("", GUILayout.Width(70), GUILayout.Height(70)))
{
selectedObject = objects[j];
}
}
}
如何为每个按钮加载单独的纹理? 纹理位于 Resources/Textures 文件夹中。
提前致谢!
为什么不使用 GUILayout.Button
的适当重载?你应该看看 GUILayout.Button
.
例如,
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(ScriptName))]
public class ExampleOnInspector : Editor
{
public Texture[] icons;
void Awake()
{
//Load textures into icons by `AssetDatabase.LoadAssetAtPath<T>(assetPath)`
}
public override void OnInspectorGUI()
{
if (GUILayout.Button(icons[0]))
Debug.Log("Clicked the icon 0");
if (GUILayout.Button(icons[1]))
Debug.Log("Clicked the icon 1");
if (GUILayout.Button(icons[2]))
Debug.Log("Clicked the icon 2");
}
}
PS:
如果您的纹理仅用于编辑器脚本,我建议您 put them in Assets/Editor Default Resources
。否则它们将包含在您的运行时资源中。