#c_sharp #unity3d
У объекта должна меняться прозрачность, секунд на десять, а потом возвращаться в исходное состояние. Придумал вот такое: public SpriteRenderer _sprite; public void Invisibility () { var color = _sprite.color; color.a = 0.4f; _sprite.color = color; StartCoroutine(Timer()); } IEnumerator Timer() { var color = _sprite.color; yield return new WaitForSeconds(10); color.a = 1; _sprite.color = color; } Но мне кажется, это не есть хорошо.
Ответы
Ответ 1
Тот подход, который вы используете - вполне нормальный и имеет право на жизнь. Если бы был код на страницу, то, возможно, можно было бы что-то исправить. А данный код можно лишь слегка подредактировать, убрав color в объявленную переменную что бы не писать var color = _sprite.color; и в функции Timer() в конце написать StopCoroutine("Timer") Пример: using UnityEngine; using System.Collections; public class EnumeratorTest : MonoBehaviour { public SpriteRenderer _sprite; private Color _spriteColor; void Start() { _sprite = GetComponent(); _spriteColor = _sprite.color; } public void Invisibility () { _spriteColor.a = 0.4f; _sprite.color = _spriteColor; StartCoroutine(Timer()); } IEnumerator Timer() { yield return new WaitForSeconds(5); _spriteColor.a = 1; _sprite.color = _spriteColor; StopCoroutine ("Timer"); } } Если еще больше оптимизировать, то можно сделать просто отдельную мааааааленьку функцию, которую можно использовать для изменения альфа канала. Вот как это в целом будет выглядеть: using UnityEngine; using System.Collections; public class EnumeratorTest : MonoBehaviour { public SpriteRenderer _sprite; void Start() { _sprite = GetComponent (); } public void Invisibility () { SetOpacity(_sprite, 0.4f); StartCoroutine(Timer()); } IEnumerator Timer() { yield return new WaitForSeconds(5); SetOpacity(_sprite, 1); StopCoroutine ("Timer"); } private void SetOpacity(SpriteRenderer sprite, float opacity) { sprite.color = new Color(sprite.color.r, sprite.color.g, sprite.color.b, opacity); } } Ну и конечно не забывать, что лучше не применять такие магические числа из головы как 0.4f, а описать их как объявленную переменную и подставить её в в функцию. А в целом ваш код - код как код.
Комментариев нет:
Отправить комментарий