Получить сетку коллайдера частиц

Как мне получить сетчатый фильтр столкновения частиц, а затем назначить эту сетку частице.

Итак, у меня есть OnParticleCollision. Я ударяю по объекту, беру этот объект и получаю его Mesh Filter. Затем я хочу присвоить это моей частице, чтобы она влияла на ее физическое строение.

Вот мой код до сих пор.

    void Start()
    {
        Debug.Log("Script Starting...");
        part = GetComponent<ParticleSystem>();
        collisionEvents = new List<ParticleCollisionEvent>();
    }

    void OnParticleCollision(GameObject coll)
    {
        // Getting the object of the collider
        Collider obj = coll.GetComponent<Collider>();

        Mesh mesh = obj.GetComponent<MeshFilter>().mesh;

        // Assign the mesh shape of the collider to that of the particle
        ElectricWave.shape.meshRenderer = mesh; // I know this doesnt work as is.

        // Play effect
        ElectricWave.Play();

    }

person Tristan Cahill    schedule 28.02.2020    source источник


Ответы (1)


Если вы хотите, чтобы все частицы в системе принимали эту сетку, это просто. Просто получите сетку объектов, с которыми столкнулись, и примените ее к 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;
    }
}

Однако, если вместо этого вы хотите изменить сетку только этой частицы, это будет намного сложнее, поскольку ParticleCollisionEvent не содержат информацию о том, какая частица с ним столкнулась. Хорошей отправной точкой может быть просмотр значения ParticleCollisionEvent.intersection и попытка чтобы найти ближайшую к этой точке частицу с помощью GetParticles. Однако это может быть чрезвычайно затратно в вычислительном отношении, если оно вообще работает.

Более простой способ — сымитировать его, используя несколько систем частиц с чрезвычайно низкой интенсивностью излучения, чтобы изменение сетки всей системы частиц приводило к изменению только одной видимой частицы и сбросу сетки системы перед испусканием каждой новой частицы. Таким образом, вы получаете визуальный эффект, который ищете, но под капотом несколько систем частиц действуют как одна.

person Declan McKelvey-Hembree    schedule 28.02.2020