1

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

所以我有一个 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();

    }
4

1 回答 1

0

如果您希望系统中的所有粒子都采用该网格,这很简单。只需获取碰撞对象网格并将其应用于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找到最接近该点的粒子。但是,如果它确实有效,它可能在计算上非常昂贵。

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

于 2020-02-28T21:51:51.687 回答