/// <summary>Creates a new UI Camera which will be rendered with the given renderer.</summary> /// <param name="renderer">The renderer that will render this camera.</param> public UICamera(Renderman renderer) { Renderer = renderer; // Create the root gameobject: Gameobject = new GameObject(); // Create camera gameobject: CameraObject = new GameObject(); // Parent the camera to the root: CameraObject.transform.parent = Gameobject.transform; // Add a camera: SourceCamera = CameraObject.AddComponent <Camera>(); // Set the clear flags: SourceCamera.clearFlags = CameraClearFlags.Depth; // Set the culling mask: SourceCamera.cullingMask = (1 << UI.Layer); // Make it forward rendered: SourceCamera.renderingPath = RenderingPath.Forward; // Setup the cameras distance: SetCameraDistance(UI.GetCameraDistance()); // Setup the field of view: SetFieldOfView(UI.GetFieldOfView()); // Parent it to the root: Gameobject.transform.parent = UI.GUINode.transform; // Call the camera creation method: UI.CameraGotCreated(SourceCamera); }
/// <summary>Creates a new Flat World UI with the given pixels of space and a given name. /// The gameobjects origin sits at the middle of the UI by default. See <see cref="PowerUI.WorldUI.SetOrigin"/>. /// By default, 100 pixels are 1 world unit. See <see cref="PowerUI.WorldUI.SetResolution"/>.</summary> /// <param name="name">The name for the UI's gameobject.</param> /// <param name="widthPX">The width in pixels of this UI.</param> /// <param name="heightPX">The height in pixels of this UI.</param> public FlatWorldUI(string name, int widthPX, int heightPX) : base(name, widthPX, heightPX) { // It's a flat UI: Flat = true; // Create camera gameobject: CameraObject = new GameObject(); CameraObject.name = name + "-#camera"; // Parent the camera to the root: CameraObject.transform.parent = gameObject.transform; CameraObject.transform.localPosition = Vector3.zero; // Add a camera: SourceCamera = CameraObject.AddComponent <Camera>(); // Put it right at the back: SourceCamera.depth = -9999; // Set the clear flags: SourceCamera.clearFlags = CameraClearFlags.Color; SourceCamera.backgroundColor = new Color(1f, 1f, 1f, 0f); // Make it forward rendered (it deals with transparency): SourceCamera.renderingPath = RenderingPath.Forward; // Disable the camera object so we // can manually redraw at the UI rate: CameraObject.SetActive(false); float zSpace = UI.GetCameraDistance(); // Setup the cameras distance: SetCameraDistance(zSpace); // Call the camera creation method: UI.CameraGotCreated(SourceCamera); // Make it orthographic: SourceCamera.orthographic = true; // Set the orthographic size: SetOrthographicSize(); // Next it's time for the texture itself! // We now always have a RenderTexture. // Update the render texture: ChangeImage(widthPX, heightPX); // Change the layer of the gameobject and also the camera. // Set the culling mask: if (DefaultLayer == -1) { Layer = UI.Layer; } else { Layer = DefaultLayer; } gameObject.transform.position = new Vector3(0f, -150f, GlobalOffset); GlobalOffset += zSpace + 1f; }
/// <summary>Creates a new Flat World UI with the given pixels of space and a given name. /// The gameobjects origin sits at the middle of the UI by default. See <see cref="PowerUI.WorldUI.SetOrigin"/>. /// By default, 100 pixels are 1 world unit. See <see cref="PowerUI.WorldUI.SetResolution"/>.</summary> /// <param name="name">The name for the UI's gameobject.</param> /// <param name="widthPX">The width in pixels of this UI.</param> /// <param name="heightPX">The height in pixels of this UI.</param> public FlatWorldUI(string name, int widthPX, int heightPX) : base(name, widthPX, heightPX) { // It's a flat UI: Flat = true; // Create camera gameobject: CameraObject = new GameObject(); CameraObject.name = name + "-#camera"; // Parent the camera to the root: CameraObject.transform.parent = gameObject.transform; CameraObject.transform.localPosition = Vector3.zero; // Add a camera: SourceCamera = CameraObject.AddComponent <Camera>(); // Put it right at the back: SourceCamera.depth = -9999; // Set the clear flags: SourceCamera.clearFlags = CameraClearFlags.Color; SourceCamera.backgroundColor = new Color(1f, 1f, 1f, 0f); // Make it forward rendered (it deals with transparency): SourceCamera.renderingPath = RenderingPath.Forward; float zSpace = UI.GetCameraDistance(); // Setup the cameras distance: SetCameraDistance(zSpace); // Call the camera creation method: UI.CameraGotCreated(SourceCamera); // Make it orthographic: SourceCamera.orthographic = true; // Set the orthographic size: SetOrthographicSize(); // Start our handler: Handler = CameraObject.AddComponent <FlatWorldUIHandler>(); // And the location too: Handler.Location = new Rect(0, 0, widthPX, heightPX); // Apply aspect: Handler.Aspect = (float)widthPX / (float)heightPX; // Hook up the camera: Handler.Camera = SourceCamera; // Next it's time for the texture itself! We're going to try using a RenderTexture first. RenderTexture renderTexture = null; #if UNITY_5_5_OR_NEWER // Create a render texture: renderTexture = new RenderTexture(widthPX, heightPX, 16, RenderTextureFormat.ARGB32); // Apply it to the texture: Texture = renderTexture; // Hook it up: SourceCamera.targetTexture = renderTexture; #else if (SystemInfo.supportsRenderTextures) { // Create a render texture: renderTexture = new RenderTexture(widthPX, heightPX, 16, RenderTextureFormat.ARGB32); // Apply it to the texture: Texture = renderTexture; // Hook it up: SourceCamera.targetTexture = renderTexture; } else { // No RT support. Time to use our workaround instead! // Create the texture: Texture2D texture = new Texture2D(widthPX, heightPX); // Hook it up now: Handler.Output = texture; // Apply it: Texture = texture; } #endif // Change the layer of the gameobject and also the camera. // Set the culling mask: if (DefaultLayer == -1) { Layer = UI.Layer; } else { Layer = DefaultLayer; } gameObject.transform.position = new Vector3(0f, -150f, GlobalOffset); GlobalOffset += zSpace + 1f; }