(unity) Есть ли способ установить положение каждой частицы в системе частиц?

#c# #unity3d #particle-system

#c# #unity3d #система частиц

Вопрос:

Итак, я хочу создать подобие ауры вокруг игрока, как в warcraft 3 или path of exile и т. Д., Используя систему частиц, И когда персонаж бездействует, он работает отлично. Дело в том, что он не простаивает.

Я попытался изменить положение самой системы частиц с помощью Update(), но это на самом деле не влияет на положение частиц. Что мне нужно, так это установить для каждого из них позицию игрока.

Есть ли способ установить частицы в положение игрока?(или вообще любое положение)

Спасибо

Комментарии:

1. Прикреплена ли частица к проигрывателю? если да, то он должен следовать за игроком. Установлена ли локальная позиция? Когда для SimulationSpace задано значение world space и они привязаны к игроку, частицы остаются в том положении, в котором они были созданы, поэтому, если игрок перемещается, он действует как след. Если задано значение local space, то все частицы следуют за движением игрока.

2. Спасибо за ваш ответ!

Ответ №1:

Чтобы ответить на вашу проблему

Вы можете изменить ParticleSystem.simulationSpace

Определяет, анимируются ли частицы в локальном пространстве родительского объекта (следовательно, перемещаются вместе с родительским объектом), в мировом пространстве или относительно пользовательского объекта (перемещаются с помощью пользовательского объекта по вашему выбору).

Для ParticleSystemSimulationSpace.Local

Имитировать частицы в локальном пространстве

Либо через инспектор основного модуля

введите описание изображения здесь

или с помощью кода, подобного

 GetComponent<ParticleSystem>().main.simulationSpace = ParticleSystemSimulationSpace.Local;
 

Чтобы ответить на ваш вопрос заголовок

ДА. Вы можете получить частицы через ParticleSystem.GetParticles , изменить их ParticleSystem.Particle.position , а затем записать их обратно в систему, используя ParticleSystem.SetParticles

 var particles = new ParticleSystem.Particle[theParticleSystem.main.maxParticles];
var currentAmount = theParticleSystem.GetParticles(particles)

// Change only the particles that are alive
for (int i = 0; i < currentAmount; i  )
{
    particles[i].position = XYZ;
}

// Apply the particle changes to the Particle System
theParticleSystem.SetParticles(particles, currentAmount);
 

Комментарии:

1. Спасибо! последнее было тем, что я ожидал в качестве ответа. Оба одинаково полезны для меня, но позже второй будет предназначен для лучшего использования каждой отдельной частицы.