在运行时添加/删除组件

本文关键字:删除 组件 添加 运行时 | 更新日期: 2023-09-27 18:25:54

我正在脚本(c#)中创建一个多维数据集。我想删除BoxCollider,因为我正在开发一个2D游戏,并通过BoxCollider2d进行交换。然后我想添加一个RigiBody2D,并在我的世界中显示立方体。问题是我总是得到错误:

无法将组件"BoxCollider2D"添加到多维数据集,因为它与现有的"BoxCollider"派生组件!UnityEngine.GameObject:AddComponent()CreateCube:OnCollisionEnter2D(Collision2D)(位于资产/脚本/CreateCube.cs:15)

我得到这个错误,但代码无论如何都能工作。但它只进行到行毁灭(立方体。对撞机);就这样!BoxCollider被正确地移除了,因为当我看到创建的对象时,它就不见了。我真的不知道为什么编译器告诉我有一个现有的BoxCollider。

using UnityEngine;
using System.Collections;
public class CreateCube : MonoBehaviour
{
    void OnCollisionEnter2D(Collision2D coll)
    {
        // Create Cube
        GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        // Destroy BoxCollider
        Destroy(cube.collider);
        // Add BoxCollider2D
        cube.AddComponent<BoxCollider2D>();
        // Add RigiBody2D
        cube.AddComponent<Rigidbody2D>();
        // Show Cube in World
        cube.transform.position = new Vector3(0, 0.5f, 0);
    }
}

有人有主意吗?

在运行时添加/删除组件

Destroy将一直等到当前Update循环之后才能移除组件,因此在添加BoxCollider2D时不会移除Collider。请改用DestroyImmediate

但是,我建议用您想要的东西创建一个prefab,并使用Instantiate。像这样:

// Create Cube
GameObject cube = Instantiate(yourPrefab, new Vector(0, 0.5f, 0), Quaternion.identidy) as GameObject;