|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
23.01.2013, 17:13
|
#1126
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
public class PlayerController: MonoBehaviour { public int Life = 100;
public static PlayerController instance;
public void Awake() { instance = this; }
}
потом из любого скрипта
PlayerController.instance.Life -= 5;
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.01.2013, 18:44
|
#1127
|
ПроЭктировщик
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений (для 64 пользователей)
|
Ответ: Вопросы от новичка
Всем привет! Я по поводу сортировки массива. Пытаюсь сортировать массив вот так:
public class Data {
public string param1;
public string param2;
}
Data[] data;
Data[] data_sort;
После того как data заполнил делаю следующее:
data_sort = data.OrderBy (t=>int.Parse (t.param2)).ToArray ();
|
В итоге ошибка:
ArgumentNullException: Argument cannot be null.
Parameter name: s
at System.Int32.Parse (System.String s) [0x00000] in <filename unknown>:0
at GeneralMain.<GetData>m__0 (.Data t) [0x00000] in <filename unknown>:0
at System.Linq.SortSequenceContext`2[Data,System.Int32].Initialize (.Data[] elements) [0x00000] in <filename unknown>:0
at System.Linq.QuickSort`1[Data].PerformSort () [0x00000] in <filename unknown>:0
at System.Linq.QuickSort`1+<Sort>c__Iterator21[Data].MoveNext () [0x00000] in <filename unknown>:0
at System.Collections.Generic.List`1[Data].AddEnumerable (IEnumerable`1 enumerable) [0x00000] in <filename unknown>:0
at System.Collections.Generic.List`1[Data]..ctor (IEnumerable`1 collection) [0x00000] in <filename unknown>:0
at System.Linq.Enumerable.ToArray[Data] (IEnumerable`1 source) [0x00000] in <filename unknown>:0
at GeneralMain.GetData (System.String response) [0x00000] in <filename unknown>:0
|
|
(Offline)
|
|
23.01.2013, 19:53
|
#1128
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
data_sort = data.OrderBy (t=>int.Parse (t.param2??"0")).ToArray ();
|
(Offline)
|
|
23.01.2013, 20:07
|
#1129
|
ПроЭктировщик
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений (для 64 пользователей)
|
Ответ: Вопросы от новичка
Сообщение от pax
data_sort = data.OrderBy (t=>int.Parse (t.param2??"0")).ToArray ();
|
Ошибка пропала, но сортировка не происходит.
|
(Offline)
|
|
23.01.2013, 21:27
|
#1130
|
ПроЭктировщик
Регистрация: 04.11.2011
Сообщений: 176
Написано 19 полезных сообщений (для 64 пользователей)
|
Ответ: Вопросы от новичка
Оказалось что сортировка происходит - http://ideone.com/IdMyuR.
|
(Offline)
|
|
24.01.2013, 00:33
|
#1131
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Полоса прокрутки вообще страшная штука. С ней даже Space(2) может сделать отступ в 1 пиксель)
Я вот заметил, что мой сериализованный список сохраняется лишь в сцене.
После Revert из префаба все объекты списка не созданы т.е. просто null.
Объекты мои унаследованы от юнитивского Object.
Почему так может происходить?
Создаю их так:
ScriptableObject.CreateInstance(type)
Храню так:
[SerializeField] private List<Block> blockSet = new List<Block>();
|
(Offline)
|
|
24.01.2013, 00:37
|
#1132
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
А в префабе объекты есть?
ну а вообще ScriptableObject в ассетах надо сохранять как *.asset
|
(Offline)
|
|
24.01.2013, 01:56
|
#1133
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
pax, видно в префаб и не сохраняется список.
У меня не ScriptableObject, а просто Object. Создавать на каждый объект ассет будет очень не удобно. Нужно в одном списке хранить. В сцене все нормально сохраняется.
|
(Offline)
|
|
24.01.2013, 07:20
|
#1134
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Они только в сцене и сохраняются таким образом, а какой в этом толк? Классы с Serializable атрибутом прекрасно сохраняют списки на префабах.
|
(Offline)
|
|
24.01.2013, 15:10
|
#1135
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
pax, у меня полиморфизм. Обычные классы не сохранялись.
Блин! Даже не знаю что теперь делать(
Я сейчас уже даже не уверен, что я правильно создавал свои объекты.
Эта перегрузка CreateInstance<T>() where T: ScriptableObject Позволяет создавать только наследники ScriptableObject.
В той перегрузки, которой я пользовался ScriptableObject CreateInstance(Type type) нет такой проверки.
А если просто через new создавать, то почему-то ничего не создается т.е. null возвращается. Даже не знаю как это сделано без выбрасывания исключений. В некоторых языках есть фабричные конструкторы, которые могут возвращать черт знает что. В C# о таком не слышал.
Последний раз редактировалось WISHMASTER35, 24.01.2013 в 16:23.
|
(Offline)
|
|
24.01.2013, 22:18
|
#1136
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
Ну ладно, попытаюсь вешать все ScriptableObject на один ассет.
Создаю этот ассет из объекта List(:ScriptableObject), все нормально.
List list = ScriptableObject.CreateInstance<List>();
list.name = "New List";
AssetDatabase.CreateAsset(list, "Assets/New List.asset");
Затем добавляю к нему другие объекты ScriptableObject.
AssetDatabase.AddObjectToAsset(newObject, list);
И получается с иерархией полный бред.
Мой New List перемещается вглубь иерархии, а рутовым остается какая-то пустышка с тем же именем New List.
Почему так?
|
(Offline)
|
|
24.01.2013, 22:53
|
#1137
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Не мучайся и создавай отдельные ассеты, если они действительно нужны. Как ты потом будешь удалять из такого ассета объекты?
|
(Offline)
|
|
24.01.2013, 23:42
|
#1138
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Вопросы от новичка
pax, да, удаление объекта тоже вопрос. Точнее я не понял как получить список объектов у ассета, чтобы их потом удалить. Хотя они все равно хранятся в моем списке.
Я делаю список блоков для моего MineCraft. Сейчас так все просто и красиво в инспекторе редактируется. На каждый блок создавать ассет, ну совсем не гуд.
Впрочем все равно хотел, чтобы blockset можно было создавать и загружать из вне. Вообщем придется делать своим xml форматом. Жаль только для своего формата инспектор не сделаешь. Придется либо окно редактора создавать, либо блокнотом редактировать)
А сделать загрузчик для своего формата нельзя? Чтобы файл преобразовывался в юнитивский объект, как шрифт. Может в Unity 4 так уже можно?
Подумывал BlockSet писать кодом) Как в MineCraft ModLoader'е. Но тогда из вне уже сложно будет загрузить т.к. придется сначала этот код компилировать. Да и координаты текстурные вручную писать придется.
И загрузка таких кодов может быть довольно опасной. Или можно ограничить возможности этого стороннего кода?
|
(Offline)
|
|
24.01.2013, 23:48
|
#1139
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Вопросы от новичка
Сделаешь инспектор, это TextAsset, можешь для него сделать инспектор свой. С четверкой не работал, поэтому не знаю, в третей не слышал, но может можно...
|
(Offline)
|
|
25.01.2013, 00:05
|
#1140
|
Знающий
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений (для 180 пользователей)
|
Ответ: Вопросы от новичка
И получается с иерархией полный бред.
Мой New List перемещается вглубь иерархии, а рутовым остается какая-то пустышка с тем же именем New List.
|
Вообще тут все четко и прозрачно. "Пустышка" - это сам ассет. Вы же ему дали имя New List тут:
AssetDatabase.CreateAsset(list, "Assets/New List.asset");
Далее идет объект, добавленный так:
AssetDatabase.AddObjectToAsset(newObject, list);
Далее изначальный лист с тем же именем New List:
Точнее я не понял как получить список объектов у ассета, чтобы их потом удалить. Хотя они все равно хранятся в моем списке.
|
Записываешь этот список в тот же ассет с четко заданным постоянным именем. Считываешь его первым. Уже из него определяешь что в ассете.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:35.
|