Если вы хотите, чтобы все частицы в системе приняли меня sh, это просто. Просто возьмите объект столкновения со мной me sh и примените его к ParticleSystemRenderer
:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ParticleCollision : MonoBehaviour
{
private ParticleSystemRenderer particleRenderer;
void Start()
{
particleRenderer = GetComponent<ParticleSystemRenderer>();
}
void OnParticleCollision(GameObject other)
{
particleRenderer.renderMode = ParticleSystemRenderMode.Mesh;
particleRenderer.material = other.GetComponent<Renderer>().material;
}
}
Однако, если вы вместо этого хотите изменить me sh из только этой частицы , это будет намного сложнее, поскольку данные ParticleCollisionEvent не содержат информацию о том, какая частица столкнулась с ней. Хорошей отправной точкой может быть поиск значения ParticleCollisionEvent.intersection и попытка найти ближайшую к этой точке частицу, используя GetParticles . Это может быть чрезвычайно затратно в вычислительном отношении, хотя, если оно вообще работает.
Более простым способом может быть фальсификация, если у вас есть системы с несколькими частицами с чрезвычайно низкими скоростями эмиссии, так что изменение me sh вся система частиц приводит к изменению только одной видимой частицы и сбросу me sh системы до того, как каждая новая частица испускается. Таким образом, вы получаете визуальный эффект, который вы ищете, но под капотом это несколько систем частиц, действующих как одна.