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