是否可以在游戏中使用 Unity 上的 EditorStyle 来制作水平按钮组?
Is possible to use EditorStyle on Unity in-game to do Horizontal Groups of Buttons?
我想在游戏中使用 EditorStyles。我检查了 EditorStyles class,我意识到一切都来自:
private GUIStyle GetStyle(string styleName)
{
GUIStyle s = GUI.skin.FindStyle(styleName) ?? EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector).FindStyle(styleName);
if (s == null)
{
Debug.LogError("Missing built-in guistyle " + styleName);
s = GUISkin.error;
}
return s;
}
这就是我使用的(在编辑器上):https://github.com/Unity-Technologies/UnityCsReference/blob/master/Editor/Mono/GUI/EditorStyles.cs#L71
所有这一切都是为了做到以下几点:
我必须执行以下操作:
EditorGUILayout.BeginHorizontal ();
if (GUILayout.Button ("Select", EditorStyles.miniButtonLeft)) {
}
if (GUILayout.Button ("Revert", EditorStyles.miniButton)) {
}
if (GUILayout.Button ("Apply", EditorStyles.miniButtonRight)) {
}
EditorGUILayout.EndHorizontal ();
但是,我想知道是否有任何可能的方法在游戏中执行此操作。这可能吗?
编辑器 类 无法在游戏中使用。
如果您正在为游戏开发 UI,您应该使用 Unity UI system,带有 Canvas
的那个,然后像 HorizontalLayoutGroup 这样的东西可以为你排序.
但是如果您打算使用 IMGUI,那是传统的 OnGUI
用户界面方式,我强烈反对您这样做,您可以使用 GUI Skin with GUILayout.BeginHorizontal.
希望我理解正确,能对您有所帮助。
此致。
我忘了有办法做到这一点。
使用编辑器脚本,我们将在磁盘上保存编辑器伪装:
bool saveAssets = false;
foreach (var editorSkin in Enum.GetValues(typeof(EditorSkin)).Cast<EditorSkin>())
{
string file = Path.Combine("Assets", "StreamingAssets", $"{editorSkin.ToString()}.guiskin");
if (!File.Exists(file))
{
AssetDatabase.CreateAsset(Instantiate(EditorGUIUtility.GetBuiltinSkin(editorSkin)), file);
saveAssets = true;
}
}
if (saveAssets)
AssetDatabase.SaveAssets();
然后,我们可以将其保存在 Resources 文件夹中,然后使用 Resources.Load
:
加载它
//
// Summary:
// Enum that selects which skin to return from EditorGUIUtility.GetBuiltinSkin.
public enum GlobalSkin
{
//
// Summary:
// The skin used for game views.
Game = 0,
//
// Summary:
// The skin used for inspectors.
Inspector = 1,
//
// Summary:
// The skin used for Scene views.
Scene = 2
}
然后,只需创建一个方法 return 他们:
// Get one of the built-in GUI skins, which can be the game view, inspector or scene view skin as chosen by the parameter.
public static GUISkin GetBuiltinSkin(GlobalSkin skin)
{
return Resources.Load<GUISkin>($"Skins/{skin.ToString()}");
}
其他一切都是通过使用 GUISkin.FindStyle("whatever")
完成的。
我想在游戏中使用 EditorStyles。我检查了 EditorStyles class,我意识到一切都来自:
private GUIStyle GetStyle(string styleName)
{
GUIStyle s = GUI.skin.FindStyle(styleName) ?? EditorGUIUtility.GetBuiltinSkin(EditorSkin.Inspector).FindStyle(styleName);
if (s == null)
{
Debug.LogError("Missing built-in guistyle " + styleName);
s = GUISkin.error;
}
return s;
}
这就是我使用的(在编辑器上):https://github.com/Unity-Technologies/UnityCsReference/blob/master/Editor/Mono/GUI/EditorStyles.cs#L71
所有这一切都是为了做到以下几点:
我必须执行以下操作:
EditorGUILayout.BeginHorizontal ();
if (GUILayout.Button ("Select", EditorStyles.miniButtonLeft)) {
}
if (GUILayout.Button ("Revert", EditorStyles.miniButton)) {
}
if (GUILayout.Button ("Apply", EditorStyles.miniButtonRight)) {
}
EditorGUILayout.EndHorizontal ();
但是,我想知道是否有任何可能的方法在游戏中执行此操作。这可能吗?
编辑器 类 无法在游戏中使用。
如果您正在为游戏开发 UI,您应该使用 Unity UI system,带有 Canvas
的那个,然后像 HorizontalLayoutGroup 这样的东西可以为你排序.
但是如果您打算使用 IMGUI,那是传统的 OnGUI
用户界面方式,我强烈反对您这样做,您可以使用 GUI Skin with GUILayout.BeginHorizontal.
希望我理解正确,能对您有所帮助。
此致。
我忘了有办法做到这一点。
使用编辑器脚本,我们将在磁盘上保存编辑器伪装:
bool saveAssets = false;
foreach (var editorSkin in Enum.GetValues(typeof(EditorSkin)).Cast<EditorSkin>())
{
string file = Path.Combine("Assets", "StreamingAssets", $"{editorSkin.ToString()}.guiskin");
if (!File.Exists(file))
{
AssetDatabase.CreateAsset(Instantiate(EditorGUIUtility.GetBuiltinSkin(editorSkin)), file);
saveAssets = true;
}
}
if (saveAssets)
AssetDatabase.SaveAssets();
然后,我们可以将其保存在 Resources 文件夹中,然后使用 Resources.Load
:
//
// Summary:
// Enum that selects which skin to return from EditorGUIUtility.GetBuiltinSkin.
public enum GlobalSkin
{
//
// Summary:
// The skin used for game views.
Game = 0,
//
// Summary:
// The skin used for inspectors.
Inspector = 1,
//
// Summary:
// The skin used for Scene views.
Scene = 2
}
然后,只需创建一个方法 return 他们:
// Get one of the built-in GUI skins, which can be the game view, inspector or scene view skin as chosen by the parameter.
public static GUISkin GetBuiltinSkin(GlobalSkin skin)
{
return Resources.Load<GUISkin>($"Skins/{skin.ToString()}");
}
其他一切都是通过使用 GUISkin.FindStyle("whatever")
完成的。