在运行时添加/删除组件
本文关键字:删除 组件 添加 运行时 | 更新日期: 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;