Прикрепить пользовательский класс к недавно созданному объекту - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь создать несколько объектов под названием Звезды. В моем классе Simulation у меня есть метод, в котором я создаю объект с именем newStar и присоединяю класс Star.

Вот моя иерархия GameObject:

GameObject hierarchy

Скрипт Simulation, имеющий класс Simulation, присоединен к игровому объекту Simulation. Скрипт Star с классом Star присоединяется к игровому объекту StarObject. В скрипте Star я прикрепил префаб звезды к prefabStar, а игровой объект StarObject был прикреплен к переменной StarObject через редактор Unity.

Вот мой класс Simulation: (ObjectStar - GameObject который является родителем prefabStar.

void listStars()
{
    int i = 0;
    while (i < (StarDataBank.Instance.NumOfStars))
    {
        int primaryID = int.Parse(StarDataBank.Instance.StarIDID[i]);
        string properName = StarDataBank.Instance.StarName[i];
        string HIPID = StarDataBank.Instance.StarIDHIP[i];
        string HDID = StarDataBank.Instance.StarIDHD[i];
        string HRID = StarDataBank.Instance.StarIDHR[i];
        string GLID = StarDataBank.Instance.StarIDGL[i];
        string BFID = StarDataBank.Instance.StarIDBF[i];
        decimal rightAscension = Convert.ToDecimal(StarDataBank.Instance.StarRA[i]);
        decimal declination = Convert.ToDecimal(StarDataBank.Instance.StarDec[i]);
        decimal Mag = Convert.ToDecimal(StarDataBank.Instance.StarMag[i]);
        decimal CI = Convert.ToDecimal(StarDataBank.Instance.StarCI[i]);
        int scale = 0;
        int r = 0;
        int g = 0;
        int b = 0;
        Star newStar = ObjectStar.AddComponent<Star>();
        newStar.Instantiate(primaryID, properName, HIPID, HDID, HRID, GLID, BFID, rightAscension, declination, Mag, CI);
        i++;
    }
}

Вот класс Star:

public void Instantiate(int primaryID, string properName, string HIPID, string HDID, string HRID, string GLID, string BFID, decimal rightAscension, decimal declination, decimal magnitude, decimal colourIndex)
{
    this.primaryID = primaryID;
    this.properName = properName;
    this.HIPID = HIPID;
    this.HDID = HDID;
    this.HRID = HRID;
    this.GLID = GLID;
    this.BFID = BFID;
    this.rightAscension = rightAscension;
    this.declination = declination;
    this.magnitude = magnitude;
    this.colourIndex = colourIndex;
    var newStar = Instantiate(prefabStar, transform.position + getVector(Convert.ToDecimal(rightAscension), Convert.ToDecimal(declination)), Quaternion.identity);
    newStar.name = (primaryID).ToString();
    newStar.transform.parent = StarObject.transform;
    newStar.transform.localScale = new Vector3(20, 20, 20);
}

Мое желаемое намерение состоит в том, чтобы создать клон prefabStar с каждым клоном, прикрепленным к Звездный класс, так что я могу получить переменные каждого клона prefabStar.

Вместо этого я получаю сообщение об ошибке «Объект, экземпляр которого вы хотите создать, равен нулю». новые игровые объекты (prefabStar не клонируется.)

РЕДАКТИРОВАТЬ: я добавил скриншот Graf префаба в редакторе, ScreenGrab prefabStar Обратите внимание, как к нему прикреплен класс Star. prefab. (Пожалуйста, не обращайте внимания на имя Star Manager, я проводил несколько тестов, проблема все еще сохраняется с именем Star)

1 Ответ

0 голосов
/ 22 февраля 2020

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

Также, если вы внесли изменения в режиме редактирования для своего объекта, который также является сборным, вам нужно применить изменения к ваш префаб, нажав на кнопку «Применить», которая, скорее всего, будет расположена в верхнем правом углу вашего редактора.

На опубликованном вами снимке экрана я бы выбрал префаб, о котором идет речь, в нижней части. вашего экрана. После выбора правая боковая панель должна измениться, чтобы показать ваши сборные данные. Затем я бы заблокировал правую боковую панель, нажав на маленький значок замка, который виден вверху. Пока вы заблокированы, просто нажмите и перетащите свои сборные конструкции с нижней панели в соответствующие места на правой боковой панели.

...