namespace BansheeEngine { /// /// Container of GUI elements that can be positioned in the scene, and can output the rendered GUI to a user defined /// camera. /// public class GUIWidget : Component { private NativeGUIWidget nativeGUIWidget; [SerializeField] private SerializableData serializableData = new SerializableData(); /// /// Skin used for rendering all the GUI elements belonging to this widget. /// internal GUISkin Skin { get { return serializableData.skin; } set { serializableData.skin = value; nativeGUIWidget.Skin = value; } } /// /// Determines to which camera are the GUI elements belonong to this widget rendered. If null then they will be /// rendered on the main camera. /// internal Camera Camera { get { return serializableData.camera; } set { serializableData.camera = value; nativeGUIWidget.Camera = value; } } /// /// Container into which all GUI elements belonging to this widget should be placed. /// internal GUIPanel Panel { get { return nativeGUIWidget.Panel; } } private void OnReset() { if (nativeGUIWidget != null) nativeGUIWidget.Destroy(); nativeGUIWidget = new NativeGUIWidget(); // Restore saved values after reset nativeGUIWidget.Skin = serializableData.skin; nativeGUIWidget.Camera = serializableData.camera; } private void OnUpdate() { nativeGUIWidget.UpdateTransform(SceneObject); if (serializableData.camera == null) nativeGUIWidget.UpdateMainCamera(Scene.Camera); } private void OnDestroy() { nativeGUIWidget.Destroy(); } /// /// Holds all data the GUIWidget component needs to persist through serialization. /// [SerializeObject] private class SerializableData { public GUISkin skin; public Camera camera; } } }