Гроза C#

Научился сам? Помоги начинающему.

Гроза C#

Сообщение breNn0r- 12 сен 2014, 22:56

Маленько посидел, подумал что может не хватать херовенькому хоррору, и придумал добавить грозу и гром, написал скрипт, выкладываю вам на суд.
Синтаксис:
Используется csharp
//Лучше всего данный скрипт использовать на камере игрока.
//Created by breNn0r-
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
[RequireComponent(typeof (AudioSource))] // Добавляем компонент AudioSource

public class Thunder : MonoBehaviour
{
        private float _time; // Время для скрипта
        private int _thunderCount; // Это будет отвечать за кол-во вспышек

        public Light Sun; // Солнце (Direction Light с включеными тенями!)
        public float minRandomTime, maxRandomTime;// Мин. и Макс. значения времени для рандома.
        public AudioClip[] Sounds = new AudioClip[3];// Звуки грома.

        void Awake ()
        {
                if (Sun == null)
                        Debug.LogError("Add Direction Light!/Добавь Солнце!");
                if (Sounds.Length == 0)
                        Debug.LogWarning("Add Thunder Sounds/Добавь звуки грома");
                if (minRandomTime <= 0)
                        minRandomTime = 20;
                if (maxRandomTime <= 0)
                        maxRandomTime = 40;

                _time = maxRandomTime;// время которое считает скрипт
                Sun.intensity = 0;// убераем интенсивность света
        }

        void Update ()
        {
                if (_time > 0) // Если время больше 0 сек.
                {
                        _time -= Time.deltaTime; // Отсчитывает время
                }
                else // Иначе
                {
                        _time = Random.Range (minRandomTime, maxRandomTime); // Выбрасываем новое время
                        _thunderCount = Random.Range (0, 3); // Выбрасываем кол-во вспышек.
                        switch (_thunderCount) // Проверка на кол-во
                        {
                        case 0: // Если вспышка 1
                                ThunderOn (); // Включаем свет
                                Invoke ("ThunderSoundOn", 0.8f); // Через 0.8 сек запускаем звук.
                                break; // Выход.
                        case 1: // Если вспышки 2
                                ThunderOn (); // Включаем свет
                                Invoke ("ThunderOn", 0.2f); // Через 0.2 сек снова включаем свет! (отключение читать ниже)
                                Invoke ("ThunderSoundOn", 1.0f);// Через 0.8 сек запускаем звук.
                                break; // Выход.
                        case 2: // Если вспышки 3
                                ThunderOn (); //
                                Invoke ("ThunderOn", 0.2f);// Через 0.2 сек снова включаем свет!
                                Invoke ("ThunderOn", 0.4f);// Через 0.4 сек снова включаем свет!
                                Invoke ("ThunderSoundOn", 1.2f);// Через 1.2 сек запускаем звук.
                                break; // Догадайся.
                        }
                }
        }

        void ThunderOn () // Включение света
        {
                Sun.intensity = 1; // Интенсивность света = 1
                Invoke ("ThunderOff", 0.1f); // Отключение света через 0.1 сек.
        }

        void ThunderOff () // Отключение света
        {
                Sun.intensity = 0; // Интенсивность света = 0
        }

        void ThunderSoundOn () // Включение звука
        {
                if (audio.isPlaying) // Если AudioSource занят,
                        audio.Stop (); // Останавливаем воспроизведение.
                audio.PlayOneShot(Sounds[_thunderCount]); // Проиграть один раз (равный кол-ву вспышек)
        }
}
 
breNn0r-
UNITрон
 
Сообщения: 150
Зарегистрирован: 22 май 2013, 15:05

Re: Гроза C#

Сообщение breNn0r- 12 сен 2014, 23:21

Маленький апдейт.
Синтаксис:
Используется csharp
//Лучше всего данный скрипт использовать на камере игрока.
//Created by breNn0r-
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
[RequireComponent(typeof (AudioSource))] // Добавляем компонент AudioSource

public class Thunder : MonoBehaviour
{
        private float _time; // Время для скрипта
        private int _thunderCount; // Это будет отвечать за кол-во вспышек

        public Light Sun; // Солнце (Direction Light с включеными тенями!)
        public float minRandomTime, maxRandomTime;// Мин. и Макс. значения времени для рандома.
        public AudioClip[] Sounds = new AudioClip[3];// Звуки грома.

        void Awake ()
        {
                if (Sun == null)
                {
                        Debug.LogError("Add Direction Light!\nДобавь Солнце (Direction Light)!");
                }
                else
                {
                        Sun.shadows = LightShadows.Soft; // +ADD Если вдруг забыли поставить тени, выставятся автоматически.
                }
                for (int i = 0; i < Sounds.Length; i ++) // +ADD Выводит информацию что нет звука в массиве под номером.
                {
                        if (Sounds[i] == null)
                        {
                                Debug.LogWarning("Add Sound Thunder!!! Sounds array №: " + i + "\nДобавь звук грома!!! Sounds массив №: " + i);
                        }
                }
                if (minRandomTime <= 0)
                        minRandomTime = 20;
                if (maxRandomTime <= 0)
                        maxRandomTime = 40;

                _time = maxRandomTime;// время которое считает скрипт
                Sun.intensity = 0;// убераем интенсивность света
        }

        void Update ()
        {
                if (_time > 0) // Если время больше 0 сек.
                {
                        _time -= Time.deltaTime; // Отсчитывает время
                }
                else // Иначе
                {
                        _time = Random.Range (minRandomTime, maxRandomTime); // Выбрасываем новое время
                        _thunderCount = Random.Range (0, 3); // Выбрасываем кол-во вспышек.
                        switch (_thunderCount) // Проверка на кол-во
                        {
                        case 0: // Если вспышка 1
                                ThunderOn (); // Включаем свет
                                Invoke ("ThunderSoundOn", 0.8f); // Через 0.8 сек запускаем звук.
                                break; // Выход.
                        case 1: // Если вспышки 2
                                ThunderOn (); // Включаем свет
                                Invoke ("ThunderOn", 0.2f); // Через 0.2 сек снова включаем свет! (отключение читать ниже)
                                Invoke ("ThunderSoundOn", 1.0f);// Через 0.8 сек запускаем звук.
                                break; // Выход.
                        case 2: // Если вспышки 3
                                ThunderOn (); //
                                Invoke ("ThunderOn", 0.2f);// Через 0.2 сек снова включаем свет!
                                Invoke ("ThunderOn", 0.4f);// Через 0.4 сек снова включаем свет!
                                Invoke ("ThunderSoundOn", 1.2f);// Через 1.2 сек запускаем звук.
                                break; // Догадайся.
                        }
                }
        }

        void ThunderOn () // Включение света
        {
                Sun.intensity = 1; // Интенсивность света = 1
                Invoke ("ThunderOff", 0.1f); // Отключение света через 0.1 сек.
        }

        void ThunderOff () // Отключение света
        {
                Sun.intensity = 0; // Интенсивность света = 0
        }

        void ThunderSoundOn () // Включение звука
        {
                if (audio.isPlaying) // Если AudioSource занят,
                        audio.Stop (); // Останавливаем воспроизведение.
                audio.PlayOneShot(Sounds[_thunderCount]); // Проиграть один раз (равный кол-ву вспышек)
        }
}
 


Отписывайтесь, что да как. Кто протестил какие мысли, впечатления, предложения.
breNn0r-
UNITрон
 
Сообщения: 150
Зарегистрирован: 22 май 2013, 15:05

Re: Гроза C#

Сообщение lwe 13 сен 2014, 11:54

Очень хорошо, вы проделали наверное большую работу, я такого ни где еще не видел.
lwe
UNITрон
 
Сообщения: 261
Зарегистрирован: 24 авг 2014, 14:20
Skype: lawsonilka

Re: Гроза C#

Сообщение bwolf88 13 сен 2014, 12:40

А я не понял как это тестить ?
Скопипастил скрипт, повесил на камеру, что должно происходить ? Или еще какие то дополнительные штуки нужно прикручивать ?
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

Re: Гроза C#

Сообщение zeone 15 сен 2014, 11:03

bwolf88 писал(а):А я не понял как это тестить ?
Скопипастил скрипт, повесил на камеру, что должно происходить ? Или еще какие то дополнительные штуки нужно прикручивать ?

Пробегись по коду там все есть, нужно указать скрипту свой дирекшнлайт и звук для грозы
zeone
UNIт
 
Сообщения: 59
Зарегистрирован: 25 ноя 2013, 19:26


Вернуться в Уроки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2