forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

pax 23.01.2013 17:13

Ответ: Вопросы от новичка
 
PHP код:

public class PlayerControllerMonoBehaviour
{
    public 
int Life 100;

     public static 
PlayerController instance;

     public 
void Awake() {
        
instance this;
     }



потом из любого скрипта

PlayerController.instance.Life -= 5;

pie 23.01.2013 18:44

Ответ: Вопросы от новичка
 
Всем привет! Я по поводу сортировки массива. Пытаюсь сортировать массив вот так:
Код:

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

pax 23.01.2013 19:53

Ответ: Вопросы от новичка
 
data_sort = data.OrderBy (t=>int.Parse (t.param2??"0")).ToArray ();

pie 23.01.2013 20:07

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от pax (Сообщение 250453)
data_sort = data.OrderBy (t=>int.Parse (t.param2??"0")).ToArray ();

Ошибка пропала, но сортировка не происходит.

pie 23.01.2013 21:27

Ответ: Вопросы от новичка
 
Оказалось что сортировка происходит - http://ideone.com/IdMyuR.

WISHMASTER35 24.01.2013 00:33

Ответ: Вопросы от новичка
 
Полоса прокрутки вообще страшная штука. С ней даже Space(2) может сделать отступ в 1 пиксель)

Я вот заметил, что мой сериализованный список сохраняется лишь в сцене.
После Revert из префаба все объекты списка не созданы т.е. просто null.
Объекты мои унаследованы от юнитивского Object.
Почему так может происходить?
Создаю их так:
ScriptableObject.CreateInstance(type)
Храню так:
[SerializeField] private List<Block> blockSet = new List<Block>();

pax 24.01.2013 00:37

Ответ: Вопросы от новичка
 
А в префабе объекты есть?

ну а вообще ScriptableObject в ассетах надо сохранять как *.asset

WISHMASTER35 24.01.2013 01:56

Ответ: Вопросы от новичка
 
pax, видно в префаб и не сохраняется список.
У меня не ScriptableObject, а просто Object. Создавать на каждый объект ассет будет очень не удобно. Нужно в одном списке хранить. В сцене все нормально сохраняется.

pax 24.01.2013 07:20

Ответ: Вопросы от новичка
 
Они только в сцене и сохраняются таким образом, а какой в этом толк? Классы с Serializable атрибутом прекрасно сохраняют списки на префабах.

WISHMASTER35 24.01.2013 15:10

Ответ: Вопросы от новичка
 
pax, у меня полиморфизм. Обычные классы не сохранялись.
Блин! Даже не знаю что теперь делать(

Я сейчас уже даже не уверен, что я правильно создавал свои объекты.
Эта перегрузка CreateInstance<T>() where T: ScriptableObject Позволяет создавать только наследники ScriptableObject.
В той перегрузки, которой я пользовался ScriptableObject CreateInstance(Type type) нет такой проверки.
А если просто через new создавать, то почему-то ничего не создается т.е. null возвращается. Даже не знаю как это сделано без выбрасывания исключений. В некоторых языках есть фабричные конструкторы, которые могут возвращать черт знает что. В C# о таком не слышал.

WISHMASTER35 24.01.2013 22:18

Ответ: Вопросы от новичка
 
Вложений: 1
Ну ладно, попытаюсь вешать все 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.
Почему так?

pax 24.01.2013 22:53

Ответ: Вопросы от новичка
 
Не мучайся и создавай отдельные ассеты, если они действительно нужны. Как ты потом будешь удалять из такого ассета объекты?

WISHMASTER35 24.01.2013 23:42

Ответ: Вопросы от новичка
 
pax, да, удаление объекта тоже вопрос. Точнее я не понял как получить список объектов у ассета, чтобы их потом удалить. Хотя они все равно хранятся в моем списке.
Я делаю список блоков для моего MineCraft. Сейчас так все просто и красиво в инспекторе редактируется. На каждый блок создавать ассет, ну совсем не гуд.

Впрочем все равно хотел, чтобы blockset можно было создавать и загружать из вне. Вообщем придется делать своим xml форматом. Жаль только для своего формата инспектор не сделаешь. Придется либо окно редактора создавать, либо блокнотом редактировать)
А сделать загрузчик для своего формата нельзя? Чтобы файл преобразовывался в юнитивский объект, как шрифт. Может в Unity 4 так уже можно?

Подумывал BlockSet писать кодом) Как в MineCraft ModLoader'е. Но тогда из вне уже сложно будет загрузить т.к. придется сначала этот код компилировать. Да и координаты текстурные вручную писать придется.
И загрузка таких кодов может быть довольно опасной. Или можно ограничить возможности этого стороннего кода?

pax 24.01.2013 23:48

Ответ: Вопросы от новичка
 
Сделаешь инспектор, это TextAsset, можешь для него сделать инспектор свой. С четверкой не работал, поэтому не знаю, в третей не слышал, но может можно...

seaman 25.01.2013 00:05

Ответ: Вопросы от новичка
 
Цитата:

И получается с иерархией полный бред.
Мой New List перемещается вглубь иерархии, а рутовым остается какая-то пустышка с тем же именем New List.
Вообще тут все четко и прозрачно. "Пустышка" - это сам ассет. Вы же ему дали имя New List тут:
Код:

AssetDatabase.CreateAsset(list, "Assets/New List.asset");
Далее идет объект, добавленный так:
Код:

AssetDatabase.AddObjectToAsset(newObject, list);
Далее изначальный лист с тем же именем New List:
Код:

list.name = "New List";
Цитата:

Точнее я не понял как получить список объектов у ассета, чтобы их потом удалить. Хотя они все равно хранятся в моем списке.
Записываешь этот список в тот же ассет с четко заданным постоянным именем. Считываешь его первым. Уже из него определяешь что в ассете.


Часовой пояс GMT +4, время: 22:34.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot