【问题标题】:Unity Spawning way to much objects on collisionUnity在碰撞时产生许多物体的方式
【发布时间】:2018-02-26 12:45:17
【问题描述】:

我正在开发一款爆破/模拟器类型的游戏。我正在研究基础知识,但我的脚本似乎不起作用。脚本的想法是,如果对象遇到足够“硬”的力,它将被该对象的破坏版本所取代。它适用于小型结构。但是当结构变得更大而不是产生 1 个被破坏的对象时,它似乎产生了更多的 waaaayy。因此游戏开始滞后。我认为这是因为一些物体撞击了其他物体。当我通过点击摧毁它们时不会发生,只有当它们相互撞击时 希望任何人都可以提供帮助。

这是代码

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

public class Destructible : MonoBehaviour { 

    public GameObject debrisPrefab;

    void OnCollisionEnter( Collision collision )
    {
        if (collision.relativeVelocity.magnitude > 3f)
        {
            Destroy(gameObject);
            Destroy();
        }
    }

    void OnMouseDown()
    {
        Destroy(gameObject);
        Destroy();
    }

    void Destroy()
    { 
        if (debrisPrefab)
        {         
            Instantiate(debrisPrefab, transform.position, transform.rotation);
        }
        Destroy(gameObject);
    }
}

【问题讨论】:

  • 究竟什么是“结构”?
  • 几个可破坏的块一起堆叠在一起
  • 这些块中的每一个都附加了Destructible 脚本组件,对吧?为什么即使在OnMouseDown 上也将块更改为碎片?
  • 如果我想看看会发生什么,它可能很有用,是的,所有块都附有这个脚本
  • 问题是每次点击游戏窗口,所有Destructible游戏对象都会变成碎片。除非您的问题在其他地方,否则您应该通过深入解释“当结构变大时它似乎产生更多”的意思来完善您的问题

标签: c# unity3d 3d


【解决方案1】:

debris 预制件是否包含其他可破坏对象?如果生成并立即发生碰撞,则可能新实例化的碎片全部被破坏。

要检查的另一件事是有多少元素可以触发碰撞。如果您的对象上有许多碰撞器,onCollisionEnter 将被调用多次。另外,您确定您只向对象添加了一次脚本吗?

最后,如果这没有帮助,请尝试使用调试行:

Debug.Log(name + " collision enter");

在控制台中打印带有碰撞对象名称的行,以尝试识别哪个对象导致过多的碰撞

【讨论】:

    猜你喜欢
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多