我在脚本中创建一个多维数据集(c#)。我想删除BoxCollider,因为我正在开发2D游戏并通过BoxCollider2d进行交换。然后我想添加一个RigiBody2D并在我的世界中显示立方体。问题是我总是得到错误:
无法将组件'BoxCollider2D'添加到Cube,因为它与之冲突 现有的'BoxCollider'衍生组件! UnityEngine.GameObject:AddComponent() CreateCube:OnCollisionEnter2D(Collision2D)(at 资产/脚本/ CreateCube.cs:15)
我收到此错误,但代码仍然有效。但它只会到Destroy(cube.collider)行;这就是它! 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);
}
}
有人有想法吗?
答案 0 :(得分:1)
Destroy
将始终等到当前Update
循环之后删除该组件,因此在您添加Collider
时不会删除BoxCollider2D
。请改用DestroyImmediate
。
但是,我建议您创建一个包含所需内容的prefab
,然后使用Instantiate
。像这样:
// Create Cube
GameObject cube = Instantiate(yourPrefab, new Vector(0, 0.5f, 0), Quaternion.identidy) as GameObject;