2014-10-07 6 views
0

Я создаю куб в скрипте (C#). Я хочу удалить BoxCollider, так как я разрабатываю 2D-игру и обмениваю ее через BoxCollider2d. Затем я хочу добавить RigiBody2D и показать куб в моем мире. Проблема в том, что я всегда получаю сообщение об ошибке:Добавить/удалить компоненты во время выполнения

Can't add component 'BoxCollider2D' to Cube because it conflicts with the existing 'BoxCollider' derived component! UnityEngine.GameObject:AddComponent() CreateCube:OnCollisionEnter2D(Collision2D) (at Assets/Scripts/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

вы, вероятно, не создать куб примитивный, но 2D спрайтов, чтобы начать с – LearnCocos2D

ответ

1

Destroy всегда будет ждать, пока после текущего Update цикла, чтобы удалить компонент, поэтому Collider не удаляется, когда вы добавляете BoxCollider2D. Вместо этого используйте DestroyImmediate.

Однако я бы рекомендовал создать prefab с тем, что вы хотите, и вместо этого использовать Instantiate. Как это:

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

Saw теперь это был 1 год старый пост, я понятия не имею, почему он показал так рано в списке. Но мой ответ может помочь другому: P –

Смежные вопросы