【问题标题】:Unity particle not deleting统一粒子不删除
【发布时间】:2018-06-10 20:31:06
【问题描述】:

我尝试删除一个游戏对象(通电),但即使在我删除它之后粒子也会克隆自己。我该如何解决这个问题?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PowerUp : MonoBehaviour {

    public float multiplier = 1.4f;
    public float duration = 4f;

    public GameObject pickupEffect;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player"))
        {
           StartCoroutine (Pickup(collision));
        }
    }

    IEnumerator Pickup(Collider2D player)
    {
        Debug.Log("Power up picked up!");

        Instantiate(pickupEffect, transform.position, transform.rotation;

        PlayerStats stats = player.GetComponent<PlayerStats>();
        stats.health *= multiplier;

        GetComponent<SpriteRenderer>().enabled = false;
        GetComponent<Collider2D>().enabled = false;


        yield return new WaitForSeconds(duration);

        stats.health /= multiplier;

        Destroy(this);
    }
}

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    在协程结束时,将Destroy(this); 更改为Destroy(gameObject);

    Destroy(this); 销毁 PowerUp 组件。而Destroy(gameObject); 会破坏整棵树。


    还可以连续多次调用OnTriggerEnter2D,从而导致无休止的实例化。您可以在StartCoroutine 之前添加一个约束来防止这种情况发生。

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player"))
        {
           if (!flag)
               StartCoroutine (Pickup(collision));
        }
    }
    
    IEnumerator Pickup(Collider2D player)
    {
        flag = true;
    

    【讨论】:

    • 我尝试破坏游戏对象,但粒子克隆了自己,我仍然可以与它发生碰撞
    • 你的意思是pickupEffect
    • 是的,就是这个!
    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多