protected virtual void Awake()
        {
            // Create the render texture.
            int horizontalResolution = Mathf.RoundToInt(RenderTextureAspectRatio * _renderTextureResolution);

            RenderTexture = new RenderTexture(horizontalResolution, _renderTextureResolution, 0)
            {
                format = RenderTextureFormat.ARGB32
            };
            RenderTexture.Create();

            // Configure the render texture camera.
            RenderTextureCamera                  = GetComponent <Camera>();
            RenderTextureCamera.aspect           = RenderTextureAspectRatio;
            RenderTextureCamera.orthographicSize = CameraVerticalSize;
            RenderTextureCamera.targetTexture    = RenderTexture;
            RenderTextureCamera.enabled          = false; // Disable automatic updates
            RenderTextureCamera.Render();

            // Create and orient the objects container.
            _renderTextureObjectsContainer = new GameObject("Objects")
            {
                layer = (int)CullingLayer.RenderToTexture,
            };
            _renderTextureObjectsContainer.transform.SetParent(transform, false);
            _renderTextureObjectsContainer.transform.localPosition =
                new Vector3(-CameraVerticalSize * RenderTextureAspectRatio, -CameraVerticalSize, 1);
        }
 public void UpdateTexture(bool force = false)
 {
     if (force)
     {
         RenderTextureCamera.Render();
     }
     _textureUpdateRequired = !force;
 }
 private void LateUpdate()
 {
     if (_textureUpdateRequired)
     {
         RenderTextureCamera.Render();
         _textureUpdateRequired = false;
     }
 }