Задержка в Unity
Пыталась сделать чтобы объект пропадал на 0.1 секунду, а потом появлялся, но он только пропадает, обратно не появляется, unity 5.6.7f1.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StarScript : MonoBehaviour {
private int chanse;
public SpriteRenderer star;
void Update () {
chanse = Random.Range (0, 100);
if (chanse == 1) {
star.color = new Color (star.color.r, star.color.g, star.color.b, 0);
Invoke ("wait", 0.1f);
star.color = new Color (star.color.r, star.color.g, star.color.b, 255);
}
void wait () {}
}
Ответы (2 шт):
Автор решения: RiotBr3aker
→ Ссылка
Вы меняете цвет, запускается что-то там куда-то там, что выполнится через секунду, а не остановит текущий код на 1 секунду. Для таких вещей нужно свою корутину писать:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StarScript : MonoBehaviour {
public SpriteRenderer star;
private IEnumerator blinkCoroutine;
void Update () {
if (Random.Range (0, 100) == 1 && blinkCoroutine == null) {
blinkCoroutine = Blink(0.1f);
StartCoroutine(blinkCoroutine);
}
}
private IEnumerator Blink(float waitTime) {
star.color = new Color (star.color.r, star.color.g, star.color.b, 0);
yield return new WaitForSeconds(waitTime);
star.color = new Color (star.color.r, star.color.g, star.color.b, 255);
blinkCoroutine = null;
}
}
Автор решения: AC Studio
→ Ссылка
Можно сделать проще.
- Вариант:
//Твой объект который будет выключаться и включаться
public GameObject game;
private void Start()
{
//1. Укажи метод который будет вызываться.
//2. Укажи изначальную вызова метода, сейчас поставлен 0.5f это стартовая время.
//3. Укажи время сколько будет повторяться метод, сейчас поставлен 5.
InvokeRepeating("ActiveObject", 0.5f,5);
}
void ActiveObject()
{
//Объект выключается и включается.
game.SetActive(!game.activeSelf);
}
2 вариант:
public SpriteRenderer star;
//Делаем галку для плавного появление звезды.
public bool act;
//добавляем управление над альфом, по умолчанию стоит 1.
public float Alpha = 1;
//добавляем скорость появление.
public float speed =1;
private void Start()
{
//1. Укажи метод который будет вызываться.
//2. Укажи изначальную вызова метода, сейчас поставлен 0.5f это стартовая время.
//3. Укажи время сколько будет повторяться метод, сейчас поставлен 5.
InvokeRepeating("ActiveObject", 0.5f,5);
}
private void Update()
{
//Вводим ограничение для альфы что бы он не ушёл за пределами 1.
Alpha = Mathf.Clamp(Alpha,0,1);
//Привяжем альфу к звезде.
star.color = new Color(star.color.r,star.color.g,star.color.b,Alpha);
if (act)
{
//Скорость добавление.
Alpha += Time.deltaTime * speed;
}
else
{
//Скорость убавление.
Alpha -= Time.deltaTime * speed;
}
}
void ActiveObject()
{
//Включаем галку и выключаем.
act = !act;
}