代码之家  ›  专栏  ›  技术社区  ›  TB Gamezz

碰撞时多个对象的统一生成方式

  •  0
  • TB Gamezz  · 技术社区  · 6 年前

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

    这是密码

    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);
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Basile Perrenoud    6 年前

    你呢 debris 预制是否包含其他可破坏对象?如果产卵并立即发生碰撞,可能新实例化的碎片都会被销毁。

    另一个需要检查的是有多少元素可以触发碰撞。如果您的对象上有许多碰撞器,则会多次调用OnCollisionCenter。此外,您确定只向对象添加了一次脚本吗?

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

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

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