2014-09-16 3 views
2

У меня есть prefab, загруженный в папку «Ресурсы», но когда я пытаюсь получить ее из кода, она возвращает мне NULL. Как я могу сделать это правильно? Я просто хочу, чтобы получить сборные и получить доступ к своим компонентам пользовательского интерфейса, расположенных в сборном, а затем изменить значение пользовательского интерфейса из сборного объекта ..Получение нулевого значения при попытке загрузить сборку из папки ресурсов

enter image description here

GameObject alertPrefab = (GameObject)Instantiate(Resources.Load("Prefabs/AlertPrefab")); 
+1

Можете ли вы сначала добавить публичную переменную 'public GameObject alertPrefab ;', а затем вручную перетащить сборку в поле в пользовательском интерфейсе? Проверьте, работает ли это без каких-либо ошибок. Также убедитесь, что у вашего 'AlertPrefab' есть расширение' .prefab' –

+0

Думайте, что вы должны сделать так, чтобы commnet и Meehow обходились и изолировали, если ваш NullPointer не является проблемой с вашим сборником, потому что ваш экземпляр кажется правильным. Или попробуйте («Активы/Prefabs/AlertPrefab») или просто («/ Prefabs/AlertPrefab»), но я не уверен, действительно ли это имеет значение = p – Frohlich

ответ

-3

Всех названия активов & путь в Unity использует косую черту, дорожки использование обратной косой черты не будет работать.

«Prefabs/AlertPrefab») вы не можете сделать, как этот

using UnityEngine; 
using System.Collections; 

public class ExampleClass : MonoBehaviour { 
    void Start() { 
     GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube); 
     go.renderer.material.mainTexture = Resources.Load("glass", typeof(Texture2D)); 
    } 
} 
+0

Это косая черта: '/', и это обратная косая черта : '\'. Почему '' Prefabs/AlertPrefab'' ошибаться? Подтверждаю – GabLeRoux

+1

К сожалению, GabLeRoux прав - этот ответ совершенно неправ. Путь * * используется с помощью косых черт. –

0

Вы также можете создать public или [SerializeField] переменную типа GameObject и перетащить Prefab вы хотите использовать, в script внутри Inspector.

Создать общественный вар

enter image description here

Перетащите сборный из сборной папки в сценарий

enter image description here

И чем создать его экземпляр из общественного вара внутри сценария

private void spawnNewFood() { 
    float rand = Random.Range (2, 6); 
    int factor = ((int)rand % 2 == 0) ? 1 : -1; 
    float x = rand * factor; 
    float z = rand * factor; 

    Vector3 positionFood = new Vector3 (x, 0, z); 
    Instantiate (_food, positionFood, Quaternion.identity); 
} 
Смежные вопросы