using System; using Unity.XR.CoreUtils; using UnityEngine; using UnityEngine.UI; public class ImageGenerationBox : MonoBehaviour { public Material inactiveMaterial; public Material loadingMaterial; public VoiceTranscriptionBox voiceTranscriptionBox; public Image imageDisplay; public Texture2D LastTexture { get; private set; } public string promptSuffix = ", single object, front and side fully visible, realistic style, plain neutral background, clear details, soft studio lighting, true-to-scale"; private MeshRenderer meshRenderer; private bool isLoading; // Start is called before the first frame update void Start() { meshRenderer = GetComponent(); } // Update is called once per frame void Update() { } async void OnTriggerEnter(Collider other) { if (isLoading) return; KbmController controller = other.GetComponent(); XROrigin playerOrigin = other.GetComponent(); if (controller != null || playerOrigin != null) { string inputPrompt = voiceTranscriptionBox.GetTextOutput(); string refinedPrompt = inputPrompt + promptSuffix; isLoading = true; meshRenderer.material = loadingMaterial; byte[] imageBytes = await InvokeAiClient.Instance.GenerateImage(refinedPrompt); LastTexture = ModelGenerationUtils.CreateTexture(imageBytes); Sprite sprite = ModelGenerationUtils.CreateSprite(LastTexture); imageDisplay.sprite = sprite; isLoading = false; meshRenderer.material = inactiveMaterial; } } }