2015-11-10 7 views
0

Я не знаю, что не так с моей частью уничтожения приведенного ниже кода. Я пытаюсь сохранить только 1 GameControl на всех сценах. Кажется, что каждый раз, когда я переключаюсь обратно на эту сцену, мой GameControl читается как нуль, и создается новый GameControl, и я заканчиваю тем, что имеет более 1 GameControl.Unity3D - GameControl всегда null?

Для справки: я пытался портировать код с 18:24 до JavaScript из этого link

Пожалуйста посоветуйте.

#pragma strict 

var control : GameControl; 

function Awake() { 
Debug.Log("GameControl runs"); 

    if (control == null) 
    { 
     DontDestroyOnLoad(gameObject); 
     control = this; 
     Debug.Log(control); 
    } else if (control != this) 
    { 
     Destroy(gameObject); 
     Debug.Log("Destroy?"); 
    } 
} 

function Update() 
{ 
} 
+0

@ LumbusterTick Вы правы! Раньше я пытался «статический контроль var: GameControl», но это не сработало. Пожалуйста, отправьте свой ответ как ответ на этот вопрос, а не комментарий, чтобы я мог выбрать его и дать вам очки! По крайней мере, я думаю, вот как это работает. Спасибо! :-) – wsgb

+0

да, вам нужно быть осторожным с синтаксисом, случается с лучшими из нас, я рекомендовал вам следить за тоталитарием при отладке внутри используемого ediotr, сэкономит вам много времени – LumbusterTick

+0

Я не думал об этом , хороший совет! :-) – wsgb

ответ

1

Проблема заключается в том, что вы не используете статическую переменную как это:

static var control : GameControl;

Проще говоря, будучи static означает эта переменная будет содержать одинаковое значение во всех ваших сценариев, таким образом, check if(control == null) всегда останется верным, потому что ваш GameObject создаст новую переменную при загрузке новой сцены. Этот новый объект все еще не является статичным и, следовательно, совершенно другим. Надеюсь, это поможет. Если вы все еще запутались, я бы посоветовал прочитать некоторые отдельные статьи, потому что есть много способов добиться этого, кроме этого.