我想为GUI元素添加一些选项。例如,像这样:
GUILayout.Button("Click me!", GUILayout.Width(someValue));
我的问题是对GUILayout.Width()
的调用是否在堆上创建了一个新对象,缓存了值,还是返回了一个结构?因为如果它每次都创建一个新实例,那么在开始时创建它可能是值得的,而不是在每次调用OnGUI()
时创建它,以避免过多的垃圾收集。
答案 0 :(得分:1)
每次调用GUILayoutOption
时,它都会创建GUILayout.Width()
的新实例。以下是Unity源代码支持此内容的一些片段:
每次调用GUILayout.Width()
时都会创建一个新实例
GUILayout.cs -- Line #903
public static GUILayoutOption Width(float width)
{
return new GUILayoutOption(GUILayoutOption.Type.fixedWidth, width);
}
GUILayoutOption是一个类,而不是结构
GUILayoutOption.cs -- Line #5
public sealed class GUILayoutOption
另一方面注意:对GUILayout.Button
的调用需要params GUILayoutOption[]
,因此它会在每次调用时隐式创建一个新数组。如果您希望缓存GUILayoutOption
,您可以将它们缓存在数组中并将其传递给GUILayout.Button()
。