Как загружать данные из разных вариантов Scriptable Object?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как загружать данные из разных вариантов Scriptable Object?

Сообщение rhymer 18 авг 2018, 00:17

Я только начал своё знакомство с Unity и с программированием в целом, поэтому возможно мой вопрос покажется очевидным, но всё же...

Я создал Scriptable Object enemy, содержащий несколько переменных. Затем я создал несколько вариантов данного объекта, установив в каждом различные значения данных переменных. Теперь я могу выводить значения этих переменных в текстовом поле, если загружаю вручную через инспектор какой-либо из созданных вариантов. Всё отлично работает.

Синтаксис:
Используется csharp
public class TestLinks : MonoBehaviour {
    public Enemy enemy;
    public string Enemyname;
    public Button testButton;
    public Text testText;
}
 void Start() {
        Enemyname = enemy.name;
}
public void Onclick()
    {
        testText.text = "Enemy's name is" + Enemyname;
    }

Вопрос в следующем: Как, вместо того чтобы загружать разные варианты enemy в инспекторе вручную, менять их на ходу через скрипт, например, при нажатии на кнопку?
То есть, при нажатии, скажем, пробела из папки ассетов в поле enemy вместо условного enemy1 загружался условный enemy2, и, как следствие, переменные принимали бы значения, прописанные в варианте enemy2?
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Как загружать данные из разных вариантов Scriptable Object?

Сообщение 1max1 18 авг 2018, 08:01

Синтаксис:
Используется csharp
int enemyNumber = Random.Range(0, 10);
var enemy = Resources.Load<Enemy>("Enemy" + enemyNumber.ToString());
 

п.с. Можно еще в массив всё запихать в инспекторе.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как загружать данные из разных вариантов Scriptable Object?

Сообщение rhymer 18 авг 2018, 15:32

Я не совсем понял, зачем объявлять переменную int enemyNumber = Random.Range(0, 10);
Тем не менее, это натолкнуло меня на то, как решить мою проблему. Я воспользовался
Синтаксис:
Используется csharp
enemy = AssetDatabase.LoadAssetAtPath<Enemy>("assets/enemies/enemy1.asset");

Теперь всё работает, при нажатии на разные кнопки загружаются разные виды врагов из ассетов. Правда, появилась другая проблема - проект не получается скомпилировать. Когда я нажимаю на build and run, получаю ошибку error CS0103: The name `AssetDatabase' does not exist in the current context.
И это при том, что когда я запускаю проект в редакторе, никаких проблем не появляется.
P.S. Если это важно, то в скрипте я прописал using UnityEditor;
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Как загружать данные из разных вариантов Scriptable Object?

Сообщение 1max1 18 авг 2018, 17:28

Я не совсем понял, зачем объявлять переменную int enemyNumber = Random.Range(0, 10);

Это в качестве примера, того как можно подгружать разные ресурсы с разными именами, к примеру enemy1, enemy2 ...
AssetDatabase вроде как только в редакторе работает, Resources.Load по религиозным соображениям не хочешь использовать?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как загружать данные из разных вариантов Scriptable Object?

Сообщение rhymer 18 авг 2018, 19:45

1max1 писал(а):AssetDatabase вроде как только в редакторе работает, Resources.Load по религиозным соображениям не хочешь использовать?

Unity ругается на эту команду. Пишет Resources.LoadAssetAtPath<T>(string) является устаревшим: Use AssetDataBase.LoadAssetAtPath<T>() instead (UnityUpgradable) ->*[UnityEditor] UnityEditor.AssetDataBase.LoadAssetAtPath<T>(*)
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48

Re: Как загружать данные из разных вариантов Scriptable Object?

Сообщение 1max1 18 авг 2018, 20:04

[-x
Создаешь папку в Assets с названием Resources (смотри не ошибись это важно), кидаешь в нее своих енеми, и потом в коде загружаешь через https://docs.unity3d.com/ScriptReferenc ... .Load.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как загружать данные из разных вариантов Scriptable Object?

Сообщение seaman 18 авг 2018, 21:38

LoadAssetAtPath ... UnityEditor...
Т.е. Вы делаете расширение редактора, а не рантайм загрузку?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как загружать данные из разных вариантов Scriptable Object?

Сообщение BabuinSlayer 18 авг 2018, 22:51

У меня как раз вопрос по теме, можно ли как-то сериализовать, скажем, словарь вида <int, ScriptableObject>, дабы загружать из ресурсов только если хочу добавить/удалить какие-то объекты и после изменения сериализовать заново?
BabuinSlayer
UNец
 
Сообщения: 1
Зарегистрирован: 12 авг 2018, 01:04

Re: Как загружать данные из разных вариантов Scriptable Object?

Сообщение rhymer 18 авг 2018, 23:20

1max1 писал(а):[ загружаешь через https://docs.unity3d.com/ScriptReferenc ... .Load.html

Спасибо большое! Теперь и работает в редакторе, и компилируется как надо.
Аватара пользователя
rhymer
UNец
 
Сообщения: 24
Зарегистрирован: 17 авг 2018, 23:48


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18