Страница 1 из 1

Плавное исчезновение спрайта.

СообщениеДобавлено: 20 апр 2017, 12:49
D_Freezer
Есть спрайт, мне нужно чтобы при попадании на триггер он плавно пропадал. При выходе из триггера так же плавно появлялся. Данный код работает, но почему-то с задержкой. То есть вхожу в триггер, несколько секунд ничего не происходит. Выхожу, так же.

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class door : MonoBehaviour {
    public SpriteRenderer house; // спрайт
    public float changeSpeed = 1.0f; // скорость изменения
    private Color color; // переменная для цвета
    private bool isExit = true; // переменная проверки на присутствие игрока в триггере
        // Use this for initialization
        void Start () {
        color = house.color; // сохраняем текущий цвет
        }
       
        // Update is called once per frame
        void Update () {
        if (!isExit) // если в триггере
        {
            color.a -= Time.deltaTime; // уменьшаем альфа-канал спрайта
            house.color = color; // инициализируем новым цветом спрайт
        }
        else if (isExit) // если не в триггере
        {
            color.a += Time.deltaTime; // увеличиваем альфа-канал
            house.color = color; // инициализируем цвет спрайта
        }
        }

    void OnTriggerStay2D(Collider2D obj)
    {
        if (obj.tag == "Player")
        {
            isExit = false;
        }
    }

    void OnTriggerExit2D(Collider2D obj)
    {
        if (obj.tag == "Player")
        {
            isExit = true;
        }
    }
}
 

Re: Плавное исчезновение спрайта.

СообщениеДобавлено: 20 апр 2017, 15:37
samana
Добавьте в конце Update Debug.Log(house.color.a) чтобы убедится в том, что всё работает так, как ожидалось. Вдруг не всё так просто. :-ss

Re: Плавное исчезновение спрайта.

СообщениеДобавлено: 20 апр 2017, 20:01
D_Freezer
И правда! Альфа-канал почему-то 1.0 в начале, а не 255...

Re: Плавное исчезновение спрайта.

СообщениеДобавлено: 20 апр 2017, 21:34
D_Freezer
В общем, может кому пригодится... Решил это добавлением функции color.a = Mathf.Clamp(color.a, 0, 1);, ограничивающая полученое значение в данном диапазоне.

Re: Плавное исчезновение спрайта.

СообщениеДобавлено: 22 апр 2017, 23:38
siriusspark
Альфа-канал "почему-то" 1.0 потому что в color цвета кодируются от 0 до 1. Используйте Color32, если хотите применять привычное кодирование rgb.

Re: Плавное исчезновение спрайта.

СообщениеДобавлено: 23 апр 2017, 04:34
Kabanelloo
color.a = Mathf.Clamp(color.a, 0, 1) верно , ибо в коде просто пока отнимется, потом пока добавиться и есть эти секунды.