using UnityEngine; using System.Collections; using UnityEngine.Networking; public class ScreenShot : MonoBehaviour { [Header("API Settings")] [SerializeField] private string apiUrl = "http://my.xroomapp.com:8000/uploadImage/"; [SerializeField] private string screenshotName = "Screenshot"; [Header("Cooldown Settings")] [SerializeField] private float screenshotCooldown = 5f; private bool canTakeScreenshot = true; [Header("Camera Setup")] [SerializeField] private Camera BackCamera; [SerializeField] private Camera selfieCamera; [SerializeField] private RenderTexture tr; private Camera activeCamera; void Start() { SetActiveCamera(BackCamera); // Start with back camera by default } public void ToggleCamera() { if (activeCamera == BackCamera) { SetActiveCamera(selfieCamera); } else { SetActiveCamera(BackCamera); } } private void SetActiveCamera(Camera cameraToActivate) { BackCamera.gameObject.SetActive(cameraToActivate == BackCamera); selfieCamera.gameObject.SetActive(cameraToActivate == selfieCamera); activeCamera = cameraToActivate; } public void TakeAndUploadScreenshot() { if (canTakeScreenshot) { StartCoroutine(CaptureAndUploadScreenshot()); } else { Debug.Log("Screenshot on cooldown. Please wait."); } } private IEnumerator CaptureAndUploadScreenshot() { canTakeScreenshot = false; // Store currently active camera Camera previousCamera = activeCamera; yield return new WaitForEndOfFrame(); // Store the original active RenderTexture RenderTexture originalRT = RenderTexture.active; // Create temporary RenderTexture RenderTexture tempRT = new RenderTexture(Screen.width, Screen.height, 24); // Render camera to the temporary RenderTexture activeCamera.targetTexture = tempRT; activeCamera.Render(); RenderTexture.active = tempRT; // Read pixels into a Texture2D Texture2D screenshot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); screenshot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); screenshot.Apply(); // Cleanup: restore original targets //activeCamera.targetTexture = null; RenderTexture.active = originalRT; tempRT.Release(); Destroy(tempRT); // Convert screenshot to PNG byte[] imageBytes = screenshot.EncodeToPNG(); Destroy(screenshot); // Upload to server WWWForm form = new WWWForm(); form.AddField("name", screenshotName); form.AddBinaryData("image", imageBytes, "screenshot.png", "image/png"); using (UnityWebRequest www = UnityWebRequest.Post(apiUrl, form)) { string token = EN.instance.Me.token; www.SetRequestHeader("Authorization", "token " + token); yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.Success) { Debug.Log("Screenshot uploaded successfully!"); } else { Debug.LogError("Error uploading screenshot: " + www.error); EN.instance.showError("Upload Failed", www.error); } } // Restore active camera state SetActiveCamera(previousCamera); BackCamera.targetTexture=tr; selfieCamera.targetTexture=tr; yield return new WaitForSeconds(screenshotCooldown); canTakeScreenshot = true; } }