ООП балбес
362 / 257 / 98
Регистрация: 10.04.2020
Сообщений: 1,273
1

Баг с Resources.Load()

23.04.2020, 12:18. Показов 1864. Ответов 30

Нужно загрузить GameObject из префаба. Префаб есть, папка Resources с префабом есть.
По идее всё должно работать, но Resources.Load() в этом примере не возвращает результат, т.е. похоже на ожидание выполнения функции, содержащей бесконечный цикл.
C#
1
GameObject spawnedEnemy = Resources.Load<GameObject>("EnemyPrefab");
Юнити переустанавливал - не помогло.
Сталкивался ли кто-нибудь с данной проблемой, и если да, то как её решить?
Версия: 2019.3.10f1 (64-bit)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2020, 12:18
Ответы с готовыми решениями:

Resources.Load
есть вот такая вот функция, которая должна считать данные из txt-файла, записать в одну строку и...

Работа с Resources.Load
Всем привет. Пытаюсь заменить изображение на UI элементе, но ничего не выходит. Благодаря методу...

Как правильно задавать Path в Resources.Load()
Всем доброго утра, дня, вечера, ночи. поиск нечего конкретного не дал. У меня есть префаб...

Resources.Load<Sprite>("UISprite") возвращает null
Понадобилось устанавливать дефолтные ресурсы. Для примера UISprite. Но...

30
2218 / 1418 / 823
Регистрация: 26.10.2018
Сообщений: 4,075
23.04.2020, 12:22 2
Цитата Сообщение от TrickyBestia Посмотреть сообщение
похоже на ожидание выполнения функции, содержащей бесконечный цикл.
Что? Там результат мгновенный, либо объект, либо null. Нет там никаких циклов.
0
7 / 6 / 2
Регистрация: 30.07.2013
Сообщений: 94
23.04.2020, 12:43 3
Цитата Сообщение от TrickyBestia Посмотреть сообщение
но Resources.Load() в этом примере не возвращает результа
попробуй в методе где нужно спавнить вставить это:
C#
1
Instantiate(Resources.Load("EnemyPrefab"), spawnedEnemy.position, spawnedEnemy.rotation);
только вначале нужно объявить ваш пустой объект.

C#
1
public Transform spawnedEnemy;
0
ООП балбес
362 / 257 / 98
Регистрация: 10.04.2020
Сообщений: 1,273
23.04.2020, 13:14  [ТС] 4
Mr Destructor, к сожалению, не работает.
0
7 / 6 / 2
Регистрация: 30.07.2013
Сообщений: 94
23.04.2020, 13:28 5
Цитата Сообщение от TrickyBestia Посмотреть сообщение
к сожалению, не работает.
Что вы конкретно делаете? если можно код посмотреть, все должно работать. Если у вас есть папка с префабами в папке ресурсов, то нужно указать ее так же в коде - Resources.Load("NameFolder/EnemyPrefab"), где "NameFolder" - название вашей папки.
0
ООП балбес
362 / 257 / 98
Регистрация: 10.04.2020
Сообщений: 1,273
23.04.2020, 15:48  [ТС] 6
Mr Destructor, Код тут ни при чём, у меня не работает именно эта строка.
Вот скриншот Resources:
Баг с Resources.Load()
0
2218 / 1418 / 823
Регистрация: 26.10.2018
Сообщений: 4,075
23.04.2020, 15:52 7
А что значит не работает? Переменная нул/не нул?
C#
1
2
3
GameObject spawnedEnemy = Resources.Load<GameObject>("EnemyPrefab");
print(spawnedEnemy); // Что пишет?
Instantiate(spawnedEnemy);
Может в названии префаба есть кириллические символы, попробуй переписать имя.
0
ООП балбес
362 / 257 / 98
Регистрация: 10.04.2020
Сообщений: 1,273
23.04.2020, 16:27  [ТС] 8
1max1, я же писал в начале топика - не пишет ничего.
Исполнение кода не доходит до этой строки (проверял в дебаге)
0
2218 / 1418 / 823
Регистрация: 26.10.2018
Сообщений: 4,075
23.04.2020, 16:31 9
Ну а причем тут вообще Resources тогда? Если код не доходит, значит дело где-то выше по условию...
0
ООП балбес
362 / 257 / 98
Регистрация: 10.04.2020
Сообщений: 1,273
23.04.2020, 16:38  [ТС] 10
1max1, как я понимаю, эта строка
Баг с Resources.Load()

считается бесконечно, т.к.
C#
1
Image enemysImage = spawnedEnemy.GetComponent<Image>();
никогда не выполняется.
0
1585 / 963 / 509
Регистрация: 23.02.2019
Сообщений: 2,505
23.04.2020, 17:07 11
Это будет тянутся до бесконечности.
TrickyBestia, Вы можете просто скопировать код создания enemy (оформив его тегами C#) и показать его здесь, вместо картинок?
Судя по последнему скриншоту, для создания врага, вам нужно вызвать метод GetRandomEnemy и передать ему какие-то параметры. Вы это делаете? Покажите пожалуйста весь метод GetRandomEnemy и то место, где вы пытаетесь создать врага в игре.
0
ООП балбес
362 / 257 / 98
Регистрация: 10.04.2020
Сообщений: 1,273
23.04.2020, 17:26  [ТС] 12
samana, Вот, но он не дописан. Мне нужно было его протестить и я нашёл этот баг.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        public static GameObject GetRandomEnemy(Type[] enemyTypes)
        {
            GameObject spawnedEnemy = Resources.Load<GameObject>("EnemyPrefab");
            Image enemysImage = spawnedEnemy.GetComponent<Image>();
            Button enemysButton = spawnedEnemy.GetComponent<Button>();
            Enemy enemysEnemy = spawnedEnemy.GetComponent<Enemy>();
 
            double treshold = 1 / enemyTypes.Length;
            double seed = UnityEngine.Random.value;
            Enemies.EnemyPreset enemyPreset = null;
            for (int i = 0; i <= enemyTypes.Length; i++)
            {
                if (seed <= treshold * i)
                {
                    enemyPreset = enemyTypes[i].GetConstructor(new Type[0]).Invoke(new object[0]) as Enemies.EnemyPreset;
                    break;
                }
            }
 
            enemysEnemy.Sprite = enemyPreset.Sprite;
            enemysEnemy.hitPoints = enemyPreset.HP;
            enemysEnemy.fullHP = enemyPreset.HP;
            enemysEnemy.moneyForKill = enemyPreset.MoneyForKill;
 
            return spawnedEnemy;
        }
0
2218 / 1418 / 823
Регистрация: 26.10.2018
Сообщений: 4,075
23.04.2020, 17:32 13
Ну божишь ты мой...
Берешь в 1 строке тела метода пишешь Debug.Log(123);
Запускаешь игру, смотришь консольку, если нифига нет - значит вы обосрались ошиблись. Вызов этого метода не происходит. Всё элементарно просто, идем дальше по иерархии и смотрим уже тот код, где вызывается этот метод, и почему он не вызывается.
0
ООП балбес
362 / 257 / 98
Регистрация: 10.04.2020
Сообщений: 1,273
23.04.2020, 17:37  [ТС] 14
1max1, вот новый код метода
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        public static GameObject GetRandomEnemy(Type[] enemyTypes)
        {
            Debug.Log("GetRandomEnemyStarted");
            GameObject spawnedEnemy = Resources.Load<GameObject>("EnemyPrefab");
            Debug.Log("SpawnedEnemyPrefabCreated");
            Image enemysImage = spawnedEnemy.GetComponent<Image>();
            Button enemysButton = spawnedEnemy.GetComponent<Button>();
            Enemy enemysEnemy = spawnedEnemy.GetComponent<Enemy>();
 
            double treshold = 1 / enemyTypes.Length;
            double seed = UnityEngine.Random.value;
            Enemies.EnemyPreset enemyPreset = null;
            for (int i = 0; i <= enemyTypes.Length; i++)
            {
                if (seed <= treshold * i)
                {
                    enemyPreset = enemyTypes[i].GetConstructor(new Type[0]).Invoke(new object[0]) as Enemies.EnemyPreset;
                    break;
                }
            }
 
            enemysEnemy.Sprite = enemyPreset.Sprite;
            enemysEnemy.hitPoints = enemyPreset.HP;
            enemysEnemy.fullHP = enemyPreset.HP;
            enemysEnemy.moneyForKill = enemyPreset.MoneyForKill;
 
            return spawnedEnemy;
        }
Вот консоль:
Баг с Resources.Load()
0
2218 / 1418 / 823
Регистрация: 26.10.2018
Сообщений: 4,075
23.04.2020, 17:45 15
О-о-очень интересно...
А нет никаких ошибок в консоли? Класс Resources точно юньковский? Попробуй написать по неймспейсу:
C#
1
UnityEngine.GameObject spawnedEnemy = UnityEngine.Resources.Load<GameObject>("EnemyPrefab");
Это конечно очень вряд ли что там другой класс, ну мало ли)
0
ООП балбес
362 / 257 / 98
Регистрация: 10.04.2020
Сообщений: 1,273
23.04.2020, 17:46  [ТС] 16
1max1, написал, не помогло.
0
2218 / 1418 / 823
Регистрация: 26.10.2018
Сообщений: 4,075
23.04.2020, 17:53 17
У тебя включено отображение ошибок в консоли?
Попробуй ради теста вот так еще:
C#
1
2
3
4
5
6
7
8
        public static GameObject GetRandomEnemy(Type[] enemyTypes)
        {
            Debug.Log("start");
            GameObject spawnedEnemy = Resources.Load<GameObject>("EnemyPrefab");
            Debug.Log("end");
          
            return null;
        }
0
Миниатюры
Баг с Resources.Load()  
ООП балбес
362 / 257 / 98
Регистрация: 10.04.2020
Сообщений: 1,273
23.04.2020, 17:57  [ТС] 18
1max1, вот новый код метода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        public static GameObject GetRandomEnemy(Type[] enemyTypes)
        {
            Debug.Log("start");
            GameObject spawnedEnemy = Resources.Load<GameObject>("EnemyPrefab");
            Debug.Log("end");
            /*Image enemysImage = spawnedEnemy.GetComponent<Image>();
            Button enemysButton = spawnedEnemy.GetComponent<Button>();
            Enemy enemysEnemy = spawnedEnemy.GetComponent<Enemy>();
 
            double treshold = 1 / enemyTypes.Length;
            double seed = UnityEngine.Random.value;
            Enemies.EnemyPreset enemyPreset = null;
            for (int i = 0; i <= enemyTypes.Length; i++)
            {
                if (seed <= treshold * i)
                {
                    enemyPreset = enemyTypes[i].GetConstructor(new Type[0]).Invoke(new object[0]) as Enemies.EnemyPreset;
                    break;
                }
            }
 
            enemysEnemy.Sprite = enemyPreset.Sprite;
            enemysEnemy.hitPoints = enemyPreset.HP;
            enemysEnemy.fullHP = enemyPreset.HP;
            enemysEnemy.moneyForKill = enemyPreset.MoneyForKill;
 
            return spawnedEnemy;*/
            
            return null;
        }
Вот лог консоли:
Баг с Resources.Load()
0
2218 / 1418 / 823
Регистрация: 26.10.2018
Сообщений: 4,075
23.04.2020, 18:19 19
Это магия какая-то, рекомендую взять версию постарее и проверить на ней, не знаю даже... перезагрузи юнити))
0
66 / 46 / 20
Регистрация: 09.10.2013
Сообщений: 156
23.04.2020, 19:48 20
TrickyBestia, вы пробовали эксперимента ради загружать другой префаб? Или, скажем, грузить ч-з Resources.Load() ассет другого типа? Пробовали ли пользоваться альтернативной перегрузкой вот так Resources.Load("EnemyPrefab", typeof(GameObject))?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2020, 19:48

A2 = (Texture2D)Resources.Load("Cub_");
Не работает скрипт нужна помощь public Texture2D a2; void Update () { a2 =...

Предупреждение: "Тип My.Resources.Resources не содержит свойства с именем bg1"
Пожалуйста помогите у меня Предупреждение &quot;Тип '...My.Resources.Resources' не содержит свойства с...

Failed to load resource 403 (Forbidden), Ошибка при загрузке $('.').load(.)
При выполнении скрипта JQuery $('#rezult').load('page.php') у всех пользователей загрузка...

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

std::regex : баг на сайте или баг компилятора?
http://en.cppreference.com/w/cpp/regex/regex_match этот код выкидывает throw... Добавлено через...

Запуск Load.dll (бывшая Load.exe) в дереве проц-ов, Как запустить прогой на C# .dll-ку
Подскажите, как должен выглядеть код простейшей программы на C# (Loader.exe), которая бы загружала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.