获取粒子对撞机的网格

Get Mesh of particle collider

我将如何获取粒子碰撞的网格过滤器并将该网格分配给粒子。

所以我有一个 OnParticleCollision。我击中了这个物体,我得到了它的网状过滤器。我想将它分配给我的粒子,以便它发挥其物理构建的效果。

到目前为止,这是我的代码。

    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();

    }

如果您希望系统中的所有粒子都采用该网格,那很简单。只需获取碰撞对象网格并将其应用于 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 data does not contain which particle collided with it. A good starting point might be looking at the ParticleCollisionEvent.intersection value, and trying to find the particle nearest that point using GetParticles。不过,如果它能正常工作的话,它的计算成本可能会非常高。

一种更简单的方法可能是通过具有极低发射率的多个粒子系统来伪造它,这样改变整个粒子系统的网格只会改变一个可见粒子,并在每个新粒子之前重置系统的网格粒子被发射。这样你就可以获得你正在寻找的视觉效果,但在引擎盖下它是多个粒子系统作为一个。