Страницы

Поиск по вопросам

четверг, 9 апреля 2020 г.

unity3d выполнение скрипта по времени

#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, а описать их как объявленную переменную и подставить её в в функцию. А в целом ваш код - код как код.

Комментариев нет:

Отправить комментарий