Страница 1 из 1

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

СообщениеДобавлено: 18 авг 2018, 00:17
rhymer
Я только начал своё знакомство с 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?

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

СообщениеДобавлено: 18 авг 2018, 08:01
1max1
Синтаксис:
Используется csharp
int enemyNumber = Random.Range(0, 10);
var enemy = Resources.Load<Enemy>("Enemy" + enemyNumber.ToString());
 

п.с. Можно еще в массив всё запихать в инспекторе.

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

СообщениеДобавлено: 18 авг 2018, 15:32
rhymer
Я не совсем понял, зачем объявлять переменную 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;

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

СообщениеДобавлено: 18 авг 2018, 17:28
1max1
Я не совсем понял, зачем объявлять переменную int enemyNumber = Random.Range(0, 10);

Это в качестве примера, того как можно подгружать разные ресурсы с разными именами, к примеру enemy1, enemy2 ...
AssetDatabase вроде как только в редакторе работает, Resources.Load по религиозным соображениям не хочешь использовать?

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

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

Unity ругается на эту команду. Пишет Resources.LoadAssetAtPath<T>(string) является устаревшим: Use AssetDataBase.LoadAssetAtPath<T>() instead (UnityUpgradable) ->*[UnityEditor] UnityEditor.AssetDataBase.LoadAssetAtPath<T>(*)

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

СообщениеДобавлено: 18 авг 2018, 20:04
1max1
[-x
Создаешь папку в Assets с названием Resources (смотри не ошибись это важно), кидаешь в нее своих енеми, и потом в коде загружаешь через https://docs.unity3d.com/ScriptReferenc ... .Load.html

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

СообщениеДобавлено: 18 авг 2018, 21:38
seaman
LoadAssetAtPath ... UnityEditor...
Т.е. Вы делаете расширение редактора, а не рантайм загрузку?

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

СообщениеДобавлено: 18 авг 2018, 22:51
BabuinSlayer
У меня как раз вопрос по теме, можно ли как-то сериализовать, скажем, словарь вида <int, ScriptableObject>, дабы загружать из ресурсов только если хочу добавить/удалить какие-то объекты и после изменения сериализовать заново?

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

СообщениеДобавлено: 18 авг 2018, 23:20
rhymer
1max1 писал(а):[ загружаешь через https://docs.unity3d.com/ScriptReferenc ... .Load.html

Спасибо большое! Теперь и работает в редакторе, и компилируется как надо.