Здравствуйте ! Есть небольшой проект, по управлению частицами. Управляются они двумя кастомными классами. Задача состоит в следующем мне необходимо привязать источник частиц к объекту "A" в свою очередь конечную точку куда стремятся все частицы к объекту "B". P.s(закрепить поток частиц между двумя башнями). В конечном итоге хотелось бы получить результат при котором изменяя расстояние между башням , изменялась и длина потока частиц. Какими методами можно воспользоваться , что бы создать такую логику поведения системы частиц? Благодарю!
Попробуйте это: https://docs.unity3d.com/Manual/class-ParticleSystemForceField.html (Я не говорю по русски - я использовал Google Translate)
I'll have to give this a go with Google Translate too. I can see that a colleague has helped you with your question. Please be mindful that the forums only allow posts in English. I'm not aware of any Russian speaking Unity forums myself but it may be researching this if you have any more questions but or not able to communicate in English, as we wouldn't be able to assist here without the use of Google Translate, and that my just confuse things more. -- Я вижу, что коллега помог вам с вашим вопросом. Пожалуйста, помните, что на форумах допускаются сообщения только на английском языке Я не знаю ни одного русскоязычного форума Unity, но он может исследовать это, если у вас есть еще вопросы, но вы не можете общаться на английском языке, поскольку мы не смогли бы помочь здесь без использования Google Translate, и что мои просто все путают.
Is it something like particle attractor ? if the forcefild will not help (I have never used it, then you can try with scripts). ok, I don't think, the script is good. Just as a try to look at the possibility to control the particles trough the script. Code (CSharp): using System.Collections; using System.Collections.Generic; using UnityEngine; public class Attractor : MonoBehaviour { public ParticleSystem particleSys; ParticleSystem.Particle[] particles; private void Start() { particles = new ParticleSystem.Particle[particleSys.main.maxParticles]; } public void Update() { int particlesCount = particleSys.GetParticles(particles); for (int i = 0; i < particlesCount; i++) { Vector3 direction = transform.position - particles[i].position; if (direction.sqrMagnitude < 0.5f) { particles[i].remainingLifetime = 0; } else { particles[i].velocity = direction.normalized * particleSys.main.startSpeed.constant; } } particleSys.SetParticles(particles); } } I think, depended on the particle system, it can be better just to change the main settings from the particle system if the end position was moved and don't calculate every particle. Code (CSharp): using System.Collections; using System.Collections.Generic; using UnityEngine; public class ChangeParticle : MonoBehaviour { public ParticleSystem particleSys; Vector3 tmpPosition; private void Start() { tmpPosition = transform.position; ChangeDirection(); } private void Update() { if (tmpPosition != transform.position) { ChangeDirection(); } } void ChangeDirection () { Vector3 direction = transform.position - particleSys.transform.position; float flyTime = direction.magnitude / particleSys.main.startSpeed.constant; var tmpTime = particleSys.main; tmpTime.startLifetime = flyTime; direction = direction.normalized * particleSys.main.startSpeed.constant; var tmpVelocity = particleSys.velocityOverLifetime; tmpVelocity.x = direction.x; tmpVelocity.y = direction.y; tmpVelocity.z = direction.z; tmpPosition = transform.position; } }