【问题标题】:Unity disable particle system when outside of cameraUnity 在相机外禁用粒子系统
【发布时间】:2014-07-09 02:09:54
【问题描述】:

我正在统一制作一个以水下为主题的 2D 游戏。为了让它看起来非常漂亮,我使用脚本在地图中的随机位置生成发光物体。这些对象是附有粒子系统的空白精灵。

问题是,我在地图上一次有大约 100 个处于活动状态,虽然它看起来非常漂亮,但游戏在没有 i5 处理器或更快处理器的计算机上运行滞后。

我想到的解决方案是在物体超出相机范围时禁用它们,这样一次只有大约 4 或 5 个处于活动状态...

这是我的脚本:

void Update () {

    if (this.transform.position.x < Camera.main.transform.position.x + 13 && this.transform.position.x > Camera.main.transform.position.x - 13 && this.transform.position.y < Camera.main.transform.position.y + 13 && this.transform.position.y > Camera.main.transform.position.y - 13) {             this.gameObject.particleEmitter.emit = true;
        this.gameObject.particleSystem.Play ();


            } 

    else {

        this.gameObject.particleSystem.Pause ();


    }
} 

好的,它会检查对象是否正确地在相机边界之外,但是在禁用对象时,我会收到以下错误:

“NullReferenceException:对象引用未设置为对象的实例”

【问题讨论】:

  • 请使用unity3d标签。
  • 您至少可以缩小哪个引用为空的范围吗?使用调试器单步执行应该会有所帮助 - 虽然说实话我没有使用过 Unity 的调试器,但我假设它可以做到这一点。
  • 好的,我尝试在代码顶部使用公共“ParticleSystem Glow”声明粒子系统,然后使用:Glow.enableEmission = true/false。这消除了错误,但现在简单的代码不起作用......附加到空白实例化预制件的粒子系统在相机外应该是不可见的......但它们不是......

标签: unity3d particles


【解决方案1】:

您同时使用 particleEmitter(指代旧粒子系统)和 particleSystem(指代新 Souriken 系统)。你可能只使用了 Souriken 粒子,所以我会这样重写它:

void Update ()
{
    if (this.transform.position.x < Camera.main.transform.position.x + 13
        && this.transform.position.x > Camera.main.transform.position.x - 13
        && this.transform.position.y < Camera.main.transform.position.y + 13
        && this.transform.position.y > Camera.main.transform.position.y - 13)
    {
        particleSystem.Play ();
    } 
    else
    {
        particleSystem.Pause ();
    }
}

【讨论】:

  • 感谢您的回答。奇怪的是,我实际上已经找到了另一个解决方案(经过数小时的搜索和试验)哈哈。这是我想出的: if (this.transform.position.x
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多