【问题标题】:Unity Particles Arent Deleting But Emitting After FinishingUnity 粒子未删除但在完成后发射
【发布时间】:2021-06-21 21:57:45
【问题描述】:

所以我一直在寻找如何解决这个问题的几个小时,但我找不到解决方案,所以我想在这里问我有一个行走粒子VIDEO

这是我的更新代码我做了它所以它应该检查我们是否用操纵杆向右移动然后显示它如果我们用操纵杆向左移动那么它也应该显示它但是对于某些人原因在那之后 2 到 3 秒,发射将开始[]

1

   void Update()
    {

        if (joystick.Horizontal >= .2f)
        {

            hays.SetActive(true);
            Instantiate(hays, particleposition.transform.position, hays.transform.rotation);




        }



        if (joystick.Horizontal <= -.2f)
        {
            hays.SetActive(true);

            Instantiate(hays, particleposition.transform.position, hays.transform.rotation);



        }

我试过的 我尝试检查它是否没有执行上述代码,那么它应该只是删除但它根本不起作用它仍然会模仿我也尝试检查动画状态但它仍然是相同的东西它不会停止模仿

        if (joystick.Horizontal !>= .2f)
        {
            Destroy(gameObject, 1f);
        }

        if (joystick.Horizontal !<= -.2f)
        {
            Destroy(gameObject, 1f);
        }

我的完整代码

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

public class partscript : MonoBehaviour
{
    public Joystick joystick;
    public GameObject hays;
    public Rigidbody2D rb;
    float horizontalMove = 0f;
    public bool show = true;
    public Animator animator2;
    public Transform player;
    public Transform  particleposition; 
    


    // Start is called before the first frame update
    void Start()
    {
        transform.position = particleposition.position;
    animator2 = GetComponent<Animator>();
        //Destroy(gameObject, 1f);
    }
    //destroy(hays);
    // Update is called once per frame
    void Update()
    {

        if (joystick.Horizontal >= .2f)
        {

            hays.SetActive(true);
            Instantiate(hays, particleposition.transform.position, hays.transform.rotation);




        }



        if (joystick.Horizontal <= -.2f)
        {
            hays.SetActive(true);

            Instantiate(hays, particleposition.transform.position, hays.transform.rotation);



        }


        if (joystick.Horizontal !>= .2f)
        {
            Destroy(gameObject, 1f);
        }

        if (joystick.Horizontal !<= -.2f)
        {
            Destroy(gameObject, 1f);
        }










    }
}

【问题讨论】:

  • 您在(joystick.Horizontal !&gt;= .2f) 中使用! 符号并没有达到您认为的效果。在 C# 8.0 中,! 符号有多种含义。它可用于否定布尔表达式,即!(1 &gt; 0) 等于false,因为1 &gt; 0true,而! 否定它。不过,您在表达式中使用它的方式是作为 null 宽容运算符 - 它在您的表达式中所做的只是告诉编译器 joystick.Horizontal 不是 null。将表达式更改为if (!(joystick.Horizontal &gt;= .2f)) 以否定布尔表达式。
  • 你能告诉我们你的粒子系统的配置吗..听起来你已经在发射模块中配置了一个基于时间的发射器
  • 好的,请稍等
  • 好的,我添加了图像刷新以查看它们
  • HumanWrites 我按照你说的做了,但是我的粒子在我开始移动后不会停止破坏我会收到错误消息“GameObject 类型的对象已被破坏,但你仍在尝试访问它”它应该是只有在我不动时才会破坏,但即使我在移动,它也会继续破坏

标签: unity3d


【解决方案1】:

删除循环并将持续时间更改为 1 并开始工作

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2019-03-11
    相关资源
    最近更新 更多