2016-01-08 2 views
1

Я программирую простую игру, в которой игрок должен собрать некоторые объекты. То, что я хотел бы сделать, это то, что после того, как он собирает объект, сцена исчезает в течение нескольких секунд, а затем позиция игрока изменяется.Единство: как угасать сцену в течение нескольких секунд

Я знаю, как изменить положение, я не знаю, как сделать эффект угасания. Я попытался использовать Image Effect (например, Vortex и Blur), но я не могу медленно увеличивать их переменные (например, значение угла для Vortex и размытие итерации для размытия), что создает впечатление анимации.

Может ли кто-нибудь провести меня через это?

+0

Просто добавьте слой поверх своей сцены и медленно измените его. Alpha – Gusman

+0

@Gusman, как добавить слой поверх моей сцены? – GuendaS

+0

http://unity3d.com/es/learn/tutorials/modules/beginner/ui/ui-image – Gusman

ответ

0

Я делал подобный материал для экспериментальной 2D-игры в последнее время. Я обнаружил, что лучший способ сделать это - использовать действительно аккуратную бесплатную библиотеку - LeanTween. Вы можете использовать его для обычных игровых объектов и элементов интерфейса Unity. Вот как будет выглядеть постепенное исчезновение.

LeanTween.alpha (gameObject, 0.0f, 1.0f); 

Первый параметр должен быть объект игры вы хотите, чтобы исчезнуть из, второй является альфа-значение вы стремитесь (0.0f будет исчезать объект полностью), а последняя является длительность анимации.

1

Вы можете добавить новый объект с текстурой на сцену, чтобы он был чем-то вроде глобальной маски. Если вы хотите, чтобы ваша сцена под эффектом затухания была просто черной, тогда должно быть достаточно маленькой квадратной текстуры, заполненной черным, вы можете масштабировать ее должным образом, чтобы она соответствовала камере. И шейдер на этом материале должен поддерживать прозрачность, поэтому альфа-слой текстуры будет управляемым. Затем вы можете управлять альфа-значением из кода с помощью метода renderer.sharedMaterial.SetFloat().

Что-то вроде этого:

IEnumerator SetTransparencyLevel(bool fullyTransparent) 
{ 
for (var i = renderer.material.GetFloat("Alpha"); fullyTransparent && i > 0 || !fullyTransparent && i < 1; i+=0.05f) 
{ 
renderer.material.SetFloat("Alpha", i); 
yield return new WaitForEndOfFrame(); 
} 
} 

Я не испытал этот код, но он показывает путь.

+0

Как медленно увеличивать значение альфы? – GuendaS

+0

Я добавил пример в свой ответ. –

1

Добавление эффекта изображения ScreenOverlay к камере, установленной BlendMode к ScreenBlend и Intensity до 0, затем добавьте следующий скрипт:

bool fading; 
float fadeValue = 0; 
const float INCREMENT = 0.01f; 
const float MAX_BLEND = 2; 
ScreenOverlay so; 

void OnTriggerEnter(Collider other) 
{ 
    fading = true; 
} 

void Start() 
{ 
    so = gameObject.GetComponent<ScreenOverlay>(); 
} 

void Update() 
{ 
    if (fading) 
    { 
     fadeValue += INCREMENT; 
     so.intensity = fadeValue * MAX_BLEND; 

     if (fadeValue >= 1) 
     { 
      fading = false; 
      // change player position 
     } 
    } 
    else if (fadeValue > 0) 
    { 
     fadeValue = Mathf.Max(0, fadeValue - INCREMENT); 
     so.intensity = fadeValue * MAX_BLEND; 
    } 
} 

Чтобы увеличить продолжительность, просто сделать INCREMENT меньше. Он отлично работает для меня.

+1

Это должен быть правильный ответ –