Как снова запустить IEnumerator после SetActive(false); ⇐ C#
Как снова запустить IEnumerator после SetActive(false);
Я пытаюсь создать функцию изображения в своей игре и хочу, чтобы рамка изображения исчезла через пару секунд. После этого, когда я попытался сделать снимок еще раз, это не сработало. Я новичок в C# и буду рад помощи ^^;
После нажатия пробела появится картинка, а через несколько секунд она исчезнет. Если вы нажмете пробел еще раз, действие повторится. Действие не повторяется.
Вот код:
с использованием System.Collections; использование UnityEngine; использование UnityEngine.UI; использование UnityEngine.Animations; общедоступный класс PhotoCapture: MonoBehaviour { [Заголовок("Фотограф")] [SerializeField] частное изображение photoDisplayArea; [SerializeField] частный GameObject photoFrame; [Заголовок("Эффект вспышки")] [SerializeField] частный GameObject cameraFlash; [SerializeField] частное плавающее flashTime; [Заголовок («Эффект фотофейдера»)] [SerializeField] частный аниматор fadingAnimation; частный ScreenCapture Texture2D; частный просмотр фотографий; частная пустота Старт() { screenCapture = новая текстура2D(Screen.width, Screen.height, TextureFormat.RGB24, false); } частное недействительное обновление() { если (Input.GetKeyDown(KeyCode.Space)) { если (!viewPhoto) { StartCoroutine(CapturePhoto()); } } } IEnumerator CapturePhoto() { // Пользовательский интерфейс камеры установил ложь просмотрФото = правда; доходность возвращает новый WaitForEndOfFrame(); Rect RegionToRead = новый Rect(0, 0, Screen.width, Screen.height); screenCapture.ReadPixels(regionToRead, 0, 0, false); ScreenCapture.Применить(); ПоказатьФото(); } частная пустота ShowPhoto() { //дофлэш Sprite photoSprite = Sprite.Create(screenCapture, new Rect(0.0f, 0.0f, screenCapture.width, screenCapture.height), новый Vector2(0.5f, 0.5f), 100.0f); photoDisplayArea.sprite = photoSprite; photoFrame.SetActive(истина); fadingAnimation.Play("photoFade"); StartCoroutine(CameraFlashEffect()); доходность возврата новых WaitForSeconds (2); photoFrame.SetActive(ложь); } IEnumerator CameraFlashEffect() { //воспроизводим аудио cameraFlash.SetActive(истина); доходность возвращает новый WaitForSeconds(flashTime); cameraFlash.SetActive(ложь); } недействительный УдалитьФото() { просмотрФото = ложь; photoFrame.SetActive(ложь); // пользовательский интерфейс камеры истина } }
Я пытаюсь создать функцию изображения в своей игре и хочу, чтобы рамка изображения исчезла через пару секунд. После этого, когда я попытался сделать снимок еще раз, это не сработало. Я новичок в C# и буду рад помощи ^^;
После нажатия пробела появится картинка, а через несколько секунд она исчезнет. Если вы нажмете пробел еще раз, действие повторится. Действие не повторяется.
Вот код:
с использованием System.Collections; использование UnityEngine; использование UnityEngine.UI; использование UnityEngine.Animations; общедоступный класс PhotoCapture: MonoBehaviour { [Заголовок("Фотограф")] [SerializeField] частное изображение photoDisplayArea; [SerializeField] частный GameObject photoFrame; [Заголовок("Эффект вспышки")] [SerializeField] частный GameObject cameraFlash; [SerializeField] частное плавающее flashTime; [Заголовок («Эффект фотофейдера»)] [SerializeField] частный аниматор fadingAnimation; частный ScreenCapture Texture2D; частный просмотр фотографий; частная пустота Старт() { screenCapture = новая текстура2D(Screen.width, Screen.height, TextureFormat.RGB24, false); } частное недействительное обновление() { если (Input.GetKeyDown(KeyCode.Space)) { если (!viewPhoto) { StartCoroutine(CapturePhoto()); } } } IEnumerator CapturePhoto() { // Пользовательский интерфейс камеры установил ложь просмотрФото = правда; доходность возвращает новый WaitForEndOfFrame(); Rect RegionToRead = новый Rect(0, 0, Screen.width, Screen.height); screenCapture.ReadPixels(regionToRead, 0, 0, false); ScreenCapture.Применить(); ПоказатьФото(); } частная пустота ShowPhoto() { //дофлэш Sprite photoSprite = Sprite.Create(screenCapture, new Rect(0.0f, 0.0f, screenCapture.width, screenCapture.height), новый Vector2(0.5f, 0.5f), 100.0f); photoDisplayArea.sprite = photoSprite; photoFrame.SetActive(истина); fadingAnimation.Play("photoFade"); StartCoroutine(CameraFlashEffect()); доходность возврата новых WaitForSeconds (2); photoFrame.SetActive(ложь); } IEnumerator CameraFlashEffect() { //воспроизводим аудио cameraFlash.SetActive(истина); доходность возвращает новый WaitForSeconds(flashTime); cameraFlash.SetActive(ложь); } недействительный УдалитьФото() { просмотрФото = ложь; photoFrame.SetActive(ложь); // пользовательский интерфейс камеры истина } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение