Создание экземпляра класса на Юнити

Программирование на Юнити.

Создание экземпляра класса на Юнити

Сообщение Let_out 18 мар 2020, 16:09

Создал такой класс:
Синтаксис:
Используется csharp
public class User : MonoBehaviour
{
    public int topicNumber;
    public int questionNumber;

    public User(int topic = 1, int question = 1)
    {
        topicNumber = topic;
        questionNumber = question;
    }

    public User()
    {
        topicNumber = 1;
        questionNumber = 1;
    }

    public void GetInfo()
    {
        Debug.Log("Тема: " + topicNumber + ", Завдання: " + questionNumber);
    }
}

Его экземпляр
Синтаксис:
Используется csharp
User CurrentTask = new User()


После чего Юнити выдало такую ошибку:
You are trying to create a MonoBehaviour using the 'new' keyword. This is not allowed. MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
User:.ctor() (at Assets/NewBehaviourScript.cs:17)
NewBehaviourScript:Update() (at Assets/NewBehaviourScript.cs:49)

В инете нашел что можно исправить таким способом:
Синтаксис:
Используется csharp
this.gameObject.AddComponent<User>();
User CurrentTask = this.gameObject.GetComponent<User>();

Но если так, то я не могу заполнять поля.

Вопрос, можно ли использовать new для создание экземпляра, чтобы юнька не жаловалась. И если нет какие решения есть? Понимаю что объяснил не внятно, но я не знаю как еще это сделать
Let_out
UNец
 
Сообщения: 15
Зарегистрирован: 18 май 2019, 16:15

Re: Создание экземпляра класса на Юнити

Сообщение Jarico 18 мар 2020, 16:17

В MonoBehaviour нельзя создавать конструкторы и деструкторы т.к. MonoBehaviour-Behaviour->Component->Object создаётся нативным кодом движка
VK: _ttp://vk.com/salavan73
Discord: Майор Доигралес#9382
RakNet Unity: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Аватара пользователя
Jarico
Старожил
 
Сообщения: 624
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: Создание экземпляра класса на Юнити

Сообщение Let_out 18 мар 2020, 16:22

Тогда как заполнять поля? И где можно почитать об этом?
Let_out
UNец
 
Сообщения: 15
Зарегистрирован: 18 май 2019, 16:15

Re: Создание экземпляра класса на Юнити

Сообщение 1max1 18 мар 2020, 16:26

Ты же сам ответил на свой вопрос.
Синтаксис:
Используется csharp
go.AddComponent<User>();
User CurrentTask = go.GetComponent<User>();
CurrentTask.topicNumber = 123;
t.me/realwar_fx
Аватара пользователя
1max1
Адепт
 
Сообщения: 3775
Зарегистрирован: 28 июн 2017, 10:51

Re: Создание экземпляра класса на Юнити

Сообщение Let_out 18 мар 2020, 16:29

Просто это очень неудобно, в отличии от стандартной записи в одну строку, т.к. у меня в этом классе будет с десяток полей. Получается это единственный способ?
Let_out
UNец
 
Сообщения: 15
Зарегистрирован: 18 май 2019, 16:15

Re: Создание экземпляра класса на Юнити

Сообщение 1max1 18 мар 2020, 16:31

Let_out писал(а):Просто это очень неудобно, в отличии от стандартной записи в одну строку, т.к. у меня в этом классе будет с десяток полей. Получается это единственный способ?

Сделай в классе метод Init, и вызывай его.
Вот запись в 1 строку:
Синтаксис:
Используется csharp
class XXX : MonoBehaviour
{
    void Start()
    {
        gameObject.AddComponent<User>().Init();
    }
}

class User : MonoBehaviour
{
    public int topicNumber;
    public int questionNumber;

    public void Init(int topic = 1, int question = 1)
    {
        topicNumber = topic;
        questionNumber = question;
    }
}
t.me/realwar_fx
Аватара пользователя
1max1
Адепт
 
Сообщения: 3775
Зарегистрирован: 28 июн 2017, 10:51

Re: Создание экземпляра класса на Юнити

Сообщение Let_out 18 мар 2020, 16:41

Спасибо! Это то что нужно
Let_out
UNец
 
Сообщения: 15
Зарегистрирован: 18 май 2019, 16:15


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8