Страницы

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

суббота, 22 июня 2019 г.

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; }
Но мне кажется, это не есть хорошо.


Ответ

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

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

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