Префаб возвращает null

180
17 ноября 2018, 01:30
private void Awake()
{
    bullet = Resources.Load<Bullet>("Assets/PreFab/Bullet.prefab");
}
void Update()
{
    if (bullet == null)
        Debug.Log("Fuck");
    if (Input.GetButtonDown("Fire1")) Shoot();
}
private void Shoot()
{
    Vector3 position = transform.position; position.y += 0.8F;
    Instantiate(bullet, position, bullet.transform.rotation);
}

При нажатии кнопки которая в Unity Fire1, ошибка NullReferenceExeption.

Не понимаю в чём проблема. Префаб называется Bullet, точно, проверил. Если нужно будет, дам скрипт класса Bullet. Unity2D

Answer 1

Проблема в том, что Resources.Load ищет объекты внутри папки Resources. То есть в вашем коде объект ищется по пути Resources/Assets/PreFab/Bullet.prefab При этом у юнити довольно специфичная работа с папкой Resources, а именно - в вашем проекте может быть сколько угодно папок с таким названием, и находиться они могут где угодно в других папках. Но при сборке проекта (или запуске в редакторе) юнити собирает все папки с именем Resources и их содержимое в один виртуальный контейнер и работать будет как будто в проекте всего одна папка с таким именем, при этом все ресурсы из этих попапок будут внутри одной виртуальной Resources. Пример использования Resources.Load можно посмотреть в документации

А во-вторых, как вам правильно заметили в комментарии, вы сначла должны создать объект который вы ищете с помощью Instantiate, а только потом работать с ним

READ ALSO
Нажатие на кнопку в overlay&#39;е

Нажатие на кнопку в overlay'е

Пытаюсь сделать какой-никакой overlay для одной игры

204
Пакетная регистрация зависимостей в asp.net core

Пакетная регистрация зависимостей в asp.net core

Внимание! Это краткий перевод вопроса Implement dependency injection outside of Startupcs

199
UnhandledExceptionHandler на C# вне Visual Studio

UnhandledExceptionHandler на C# вне Visual Studio

Есть проектНачальство, спустя более 40к строк кода решило добавить логирование

165