(Unity) ArgumentException: Объект, который вы хотите создать, равен null [duplicate]

Я хотел бы указать, что нет такой вещи, как инициализация двойной скобки. Существует только обычный традиционный блок инициализации брекетов. Второй блок фигурных скобок не имеет ничего общего с инициализацией. Ответы говорят, что эти две фигурные скобки инициализируют что-то, но это не так.

Во-вторых, почти все ответы говорят о том, что это используется при создании анонимных внутренних классов. Я думаю, что люди, читающие эти ответы, получат впечатление, что это используется только при создании анонимных внутренних классов. Но он используется во всех классах. Чтение этих ответов - это какое-то новое особое будущее, посвященное анонимным классам, и я думаю, что это вводит в заблуждение.

. Идем дальше, этот вопрос говорит о ситуации, когда вторая открывающая скобка находится сразу после первого открытия скобки. Обычно в обычном классе есть некоторый код между двумя фигурными скобками, но это абсолютно одно и то же. Так что это вопрос размещения скобок. Поэтому я думаю, что мы не должны говорить, что это какая-то новая захватывающая вещь, потому что это то, что мы все знаем, но просто написано с некоторым кодом между скобками. Мы не должны создавать новую концепцию, называемую «инициализация двойной скобки».

Я не согласен с аргументом, что вы создаете слишком много анонимных классов. Вы не создаете их, потому что блок инициализации, но только потому, что вы их создаете. Они будут созданы, даже если вы не использовали две инициализации брекетов, чтобы эти проблемы возникали даже без инициализации ... Инициализация не является фактором, который создает инициализированный объект.

Кроме того, мы не должны говорить о проблеме, созданной используя эту несуществующую вещь «инициализацию двойной скобки» или даже обычную инициализацию одной скобки, поскольку описанные проблемы существуют только из-за создания анонимного класса, поэтому он не имеет ничего общего с исходным вопросом. Но все ответы дают читателям впечатление, что это не вина в создании анонимных классов, а эта злая (несуществующая) вещь, называемая «инициализация двойной скобки».

2
задан user3071284 5 November 2015 в 17:35
поделиться

2 ответа

Сделайте cactus a prefab.

Затем создайте общедоступную переменную:

 public GameObject cactus;

Затем перетащите префикс в переменную скрипта через редактор. Затем вы можете создать экземпляр.

 if(cactus != null)
 {
    GameObject g = Instantiate(cactus, new Vector3(xCoB, childVector3.y, zCoB), randomRotation) as GameObject;

    g.name = "cactus";
 }
3
ответ дан FunctionR 19 August 2018 в 04:32
поделиться

легко, если у вас есть сборные файлы, которые находятся в корневой папке Ресурсы. Другое дело, если вы хотите, чтобы они находились в подпапке «Ресурсы». Вам нужно будет создать папку «Prefabs» внутри.

Поскольку вы используете Javascript

  1. Учитывая префаб с именем «Your Prefab.prefab» в Assets / Resources:
    var NewGameObject : GameObject = Resources.Load("Your Prefab"),Vector3.zero,Quaternion.identity);
    
    Это позволит вам получить ссылку на этот сборник, загруженный в память.
  2. Если вы хотите содержать сборку или более в папке в Assets / Resources, вы должны сделать следующее: 2a. Создайте папку с именем «Prefabs» в разделе Assets / Resources. 2b. Создайте свою папку (например, «Ресурсы / Prefabs / Your Prefab Folder»); 2с. Учитывая сборку под названием «Ваш Prefab.prefab»:
    var NewGameObject : GameObject = Resources.Load("Prefabs/Your SubFolder/Your Prefab"),Vector3.zero,Quaternion.identity);
    

Примечания:

Не забудьте удалить расширение «.prefab».

В руководстве Unity указано, что вы можете загружать ресурсы из ресурсов, не указывая путь с именами папок. Разумеется, что касается предвалов (и javascript?), Которые, похоже, не верны (Unity 4.6).

1
ответ дан thomsky 19 August 2018 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: