2015-04-25 2 views
0

Привет у меня есть этот код:C# Unity Engine уничтожить() подкласс

public abstract class Test : MonoBehaviour 
{ 
    public abstract void OnStart(); 
    public abstract void OnUpdate(); 

    private void Start() 
    { 
     OnStart(); 
    } 

    private void Update() 
    { 
     if (Input.GetKeyDown(KeyCode.X)) 
     { 
      Destroy(this); 
     } 
     OnUpdate() 
    } 
} 

то я имею это:

public class SecondTest : Test 
{ 
    public override void OnStart() 
    { 

    } 

    public override void OnUpdate() 
    { 
     Writter.Log("Running"); 
    } 
} 

Однако всякий раз, когда я нажимаю X, мой writter держит протоколирование, похоже, экземпляр «Тест» уничтожается, но не мой «SecondTest» есть ли способ решить это? Спасибо!

+0

У вас есть код, который вы можете показать нам, который на самом деле компилируется? –

+0

@RobertHarve код на самом деле довольно большой, но это единственная часть, на которой я работаю в настоящий момент, после добавления Input.GetKeydown я добавил отпечатки, а уничтожение получилось правильно, но не уничтожило подкласс. Я пытаюсь выяснить, действительно ли я сделал ошибку, но код действительно прост – CheekyLewb

+0

Ну, как минимум, я думаю, нам нужно будет увидеть код для 'Destroy()'. Существует ли «Писатель»? (Вы опечалили его). Имеет ли значение, что вы называете Destroy в первом классе, но не вторым? –

ответ

0

* ОП объяснил, что целью является заставить детей быть уничтоженными, когда Родитель.

  1. Решение, вероятно, будет лучше обработано в диспетчере '(Test)' или 'LevelManager'.
  2. Вы можете назначить своих детей или сборные файлы своему менеджеру (Test) вручную или получить (Test) Manager для создания экземпляра дочернего сборника.

    GameObject child = Instantiate(prefab); 
    child.transform.SetParent(gameObject.transform); //set the child's parent to the Manager 
    
  3. Затем в (Test) Диспетчере

    private void Update() 
    { 
        if (Input.GetKeyDown(KeyCode.X)) 
        { 
         for(int i=0;i<gameObject.transform.childCount;i++) 
          Destroy(gameObject.transform.GetChild(i).gameObject); 
        } 
    } 
    

Это просто грубое предложение, есть, вероятно, лучший способ сделать это, такое как проведение некоторых ссылок на ребенок в менеджер против воспитания.

+0

Эй, спасибо за ответ, единственная причина, по которой я делаю это, потому что у меня будет много «SecondTest» классов, и я хотел, чтобы все они были уничтожены при нажатии клавиши X, я пытался избежать необходимости добавлять проверка в каждом классе ", если клавиша нажата then destroy()", поэтому мне было интересно, удалось ли уничтожить набор ключей уничтожения для всех из них в родительском классе, надеюсь, я объяснил себя достаточно хорошо, еще раз спасибо за Помогите! – CheekyLewb

+0

ах ладно ... так что ты хочешь, чтобы Родитель уничтожил детей, кк. Это объясняет, почему вы находитесь в этом затруднительном положении. Однако решение этого не будет с ребенком.Позвольте мне изменить мой ответ – user3774630

+0

Ahh большое спасибо! Это действительно сработало – CheekyLewb

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