| Particle System | 
|  | 
| 
| desantaav | Дата: Воскресенье, 13 Марта 2016, 21:27 | Сообщение # 1 |  | был не раз Сейчас нет на сайте | Здравствуйте. У меня такой вопрос, можно ли используя системы частиц например Particle System, заставить двигаться по определенной траектории, не по прямой. Предполагается с помощью неё показать движение газа в трубе, соответственно трубы изгибаются по тому по прямой не получится. |  |  |  |  | 
| 
| Lertmind | Дата: Воскресенье, 13 Марта 2016, 23:25 | Сообщение # 2 |  |   заслуженный участник Сейчас нет на сайте | Через код можно управлять ими, есть функция ParticleSystem.GetParticles  / SetParticles. Здесь пример синусоиды и новогоднего дерева. |  |  |  |  | 
| 
| desantaav | Дата: Воскресенье, 20 Марта 2016, 17:03 | Сообщение # 3 |  | был не раз Сейчас нет на сайте | Ну и в продолжение темы   Нашёл в инете подобное
 
 
 Код public void Play(bool withChildren = true); 
К сожалению не знаком с этим, кто может подсказать как включать используя это
 |  |  |  |  | 
| 
| Lertmind | Дата: Воскресенье, 20 Марта 2016, 17:19 | Сообщение # 4 |  |   заслуженный участник Сейчас нет на сайте | А ты как думаешь, если это метод? Вызвать у компонента: 
 Код var ps = GetComponent<ParticleSystem>();ps.Play();
 |  |  |  |  | 
| 
| desantaav | Дата: Воскресенье, 20 Марта 2016, 19:35 | Сообщение # 5 |  | был не раз Сейчас нет на сайте | Код   Slider qw;public GameObject test2;
 
 // Use this for initialization
 public void Start ()
 {
 
 qw = GetComponentInParent<Slider>();
 }
 
 public void Update2s()
 {
 
 Debug.Log("№=" + qw.value);
 
 if ((float)qw.value <= 70)
 {
 
 test2. gameObject.GetComponent<ParticleSystem>().Stop();
 }
 else if ((float)qw.value >= 70)
 
 {
 test2.gameObject.GetComponent<ParticleSystem>().Play();
 }
 
При qw меньше 70 Particle System выключается а при 70 и боле включается и тут-же зависает...
 |  |  |  |  | 
| 
| Lertmind | Дата: Воскресенье, 20 Марта 2016, 20:03 | Сообщение # 6 |  |   заслуженный участник Сейчас нет на сайте | Если у тебя Update2s() вызывается так же часто, как Update() тогда конечно, Play() надо вызывать один раз, у тебя каждый раз вызывается. Ещё: при 70 у тебя выполнится первое условие, потому что там <= (меньше или равно) 70. Если ты используешь слайдер, тогда можешь обрабатывать событие onValueChanged, когда значение меняется прописываешь свою логику. |  |  |  |  | 
| 
| desantaav | Дата: Воскресенье, 20 Марта 2016, 20:14 | Сообщение # 7 |  | был не раз Сейчас нет на сайте | Т.е. он запушенный пытается еще раз запустить по тому виснет Particle System ? |  |  |  |  | 
| 
| Lertmind | Дата: Воскресенье, 20 Марта 2016, 20:52 | Сообщение # 8 |  |   заслуженный участник Сейчас нет на сайте | Наверно, я не пробовал так делать. Если тебе лень делать через события, у ParticleSystem есть переменная isPlaying для проверки играет ли сейчас. |  |  |  |  | 
| 
| desantaav | Дата: Понедельник, 21 Марта 2016, 12:33 | Сообщение # 9 |  | был не раз Сейчас нет на сайте | Код using UnityEngine;using System.Collections;
 using UnityEngine.UI;
 
 public class sl : MonoBehaviour {
 
 public Slider newVl;
 public GameObject test1;
 
 
 // Use this for initialization
 public void Start () {
 
 newVl.onValueChanged.AddListener(delegate { testq();});
 
 }
 
 // Update is called once per frame
 void Update () {}
 
 public void testq()
 {
 
 Debug.Log("№=" + newVl.value);
 
 }
 
 }
хотел посмотреть как работает onValueChanged но Unity выдает ошибку:
 
 Код NullReferenceException: Object reference not set to an instance of an objectsl.Start () (at Assets/sl.cs:15)
 |  |  |  |  |