2015-06-15 4 views
0

Есть ли способ создать экземпляр класса, который происходит из MonoBehaviour, например, пример ниже, не получив предупреждения: «Вы пытаетесь создать MonoBehaviour с использованием ключевого слова« новое ». .. позволило MonoBehaviours могут быть добавлены только с помощью AddComponent() в качестве альтернативы, ваш сценарий может наследовать от ScriptableObject или нет базового класса на всех»Создайте класс, который происходит от MonoBehaviour

Пример:

public class e1506131012test2 : MonoBehaviour 
{ 
    Move move = new Move(); 
    //Move move = gameObject.GetComponent<Move>(); 

    void Update() 
    { 
     move.Printing(); 
    } 

} 

public class Move : MonoBehaviour 
{ 
    public int number = 5; 

    public void Printing() 
    { 
     print(number); 
    } 
} 
+1

Не могли бы вы прояснить, какая часть «Это запрещено» нуждается в дополнительном объяснении? В качестве альтернативы вы можете указать свою фактическую цель, и для ее достижения могут быть разные подходы. –

+0

Попробуйте: AddComponent (Move); в «классе e1506131012test2» и не позволяйте Move выводить из MonoBehaviour ... – Johan

+0

AddComponent (Move); или gameObject.Addcomponent (); дайте мне еще одну консольную ошибку (см. ответ ниже). Я хочу создать экземпляр класса, который происходит от MonoBehaviour (например: class myClass: MonoBehaviour в myOtherClass) – cubecube

ответ

0

Есть несколько способов, вы можете сделать это, проще всего использовать AddComponent, как следует из сообщения об ошибке:

Move move; 
void Start() 
{ 
    move = gameObject.Addcomponent<Move>(); 
} 

Причина вы не можете просто new вверх объект, который является производным от MonoBehaviour является то, что такие объекты должны быть составной частью GameObject. Таким образом, всякий раз, когда вы его создаете, вы должны убедиться, что он добавлен корректным способом.

+0

Спасибо, когда я использую Move move = gameObject.Addcomponent (); я получаю сообщение об ошибке в консоли говоря: «Поле инициализатор не может ссылаться на нестатическое поле, метод или свойство' UnityEngine.Component.gameObject» Надеется, что есть способ, чтобы создать экземпляр класса, производный от MonoBehaviour, не получая ошибки консоли или предупреждения. Cheers – cubecube

+0

Да, жаль, что я не думал, я обновил свой ответ на что-то, что должно работать. Кстати, если ваш GameEbject 'e1506131012test2' всегда будет иметь компонент Move, вы можете добавить его через инспектор. –

+0

Спасибо, Адам, поэтому я должен создать новый gameObject каждый раз, когда хочу создать экземпляр класса, полученного из MonoBehaviour, и прикрепить к нему скрипт класса, правильно? Я хочу сохранить его на уровне кода (нет перетаскивания в Inspector), есть ли у вас предложение о том, что было бы лучшим способом написать это? Cheers – cubecube

0

Просто не выведите его из MonoBehaviour.

public class Move 
{ 
    public int number = 5; 

    public void Printing() 
    { 
     print(number); 
    } 
} 

И если это действительно должно быть MonoBehaviour, это означает, что вы, вероятно, его на сборный, в этом случае вы используете Instantiate().

+0

Спасибо, Андрей, за ваш комментарий. – cubecube

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