void Update() { currentRate = val; RainParticleSystem.particleSystem.emissionRate = currentRate; } public static void Rain(float rate) { oldRate = currentRate; StartCoroutine(EditVal(oldRate, rate, 1.0f)); } IEnumerator EditVal(float from, float to, float timer) { float t = 0.0f; val = from; while (t < 1.0f) { t += Time.deltaTime * (1.0f / timer); val = Mathf.Lerp(from, to, t); yield return 0; } } }
Всё работало, пока я не создал отдельный скрипт для контролирования дождём и сделал функцию Rain статичной.
Дело в том что я из скрипта WeatherController вызываю RainSystem.Rain(RainRate); если Rain не статик то он компилить код отказывается ( потому что не статик ). Но если сделать Rain статик, то вызвать StartCoroutine EditVal не получается, так как она тоже не статик. Но IEnumerator сделать static невозможно. Как быть? Что делать? Не хотелось бы заменять огромный участок кода или городить ещё 1 целый скрипт для плавного изменения значения переменной.
Скинь ошибку из редактора, когда Райн не статик. И 2е. Скрипт висит на го в сцене? Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Сообщение отредактировал Kira - Понедельник, 29 Июля 2013, 21:13
Да, скрипт висит на пустом ГО. Kira, а что делает public если писать его в public void myVoid ? Какую роль тут играет public ? Я знаю что он делает с переменными. А с функцией что будет?
Assets/Scripts/WeatherController.cs(45,20): error CS0120: An object reference is required to access non-static member `RainSystem.Rain(float)'
Добавлено (29.07.2013, 22:17) --------------------------------------------- далее, делаю void Rain в public static void Rain и тогда становится такая ошибка:
Код
Assets/Scripts/Rain System/RainSystem.cs(22,9): error CS0120: An object reference is required to access non-static member `UnityEngine.MonoBehaviour.StartCoroutine(System.Collections.IEnumerator)'
1. Находишь объект, на котором RainSystem 2. Получаешь скрипт RainSystem с помощью GetComponent<RainSystem >() RainSystem rs = GetComponent<RainSystem >(); 3. Вызываешь функцию Rain в нем rs.Rain(RainRate) И не надо плодить статику без нужды.