Переменная типа Arry не отображается в инспекторе. - Форум Игроделов
Чт, 02 Май 2024, 04:21 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Переменная типа Arry не отображается в инспекторе. (Перехожу на C#)
Переменная типа Arry не отображается в инспекторе.
VolkOrievithДата: Ср, 27 Апр 2016, 15:02 | Сообщение # 1
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Не силен в терминологии, сразу извините, если назову что-то не своим именем.
Мне нужно чтобы была переменная Arry, в каждой ячейке которой были, скажем, переменные "Имя", "Название анимации", "Время анимации". Примером может служить свиток "Axes" в Input Manager. Чтобы создать некий редактируемый блок, в котором определенные анимации воспроизводятся на определенное время. В JS я бы это легко сделал:
Код

var Actions : Action[];
class Action {
var Name : String;
var AnimName : String;
var ActionTime : float;
}


Но я решил переходить на шарп из-за системы Events (события), которые работают только с шарпом.
Я написал такой код:

Код
public class MuveeCharacterAnimator : MonoBehaviour {
    public Action Actions;
    public class Action{
  public string Name;
  public string AnimName;
  public float ActionTime;
    }
}


переменная Actions не видна в инспекторе.
Может классу Action нужно назначить какой-то тип? Но какой я вообще без понятия.
Точно знаю, не может быть, чтобы в шарпе не было решения задачи, которой есть решение в JS, так что заранее благодарю за помощь!


Сообщение отредактировал VolkOrievith - Ср, 27 Апр 2016, 17:24
 
СообщениеНе силен в терминологии, сразу извините, если назову что-то не своим именем.
Мне нужно чтобы была переменная Arry, в каждой ячейке которой были, скажем, переменные "Имя", "Название анимации", "Время анимации". Примером может служить свиток "Axes" в Input Manager. Чтобы создать некий редактируемый блок, в котором определенные анимации воспроизводятся на определенное время. В JS я бы это легко сделал:
Код

var Actions : Action[];
class Action {
var Name : String;
var AnimName : String;
var ActionTime : float;
}


Но я решил переходить на шарп из-за системы Events (события), которые работают только с шарпом.
Я написал такой код:

Код
public class MuveeCharacterAnimator : MonoBehaviour {
    public Action Actions;
    public class Action{
  public string Name;
  public string AnimName;
  public float ActionTime;
    }
}


переменная Actions не видна в инспекторе.
Может классу Action нужно назначить какой-то тип? Но какой я вообще без понятия.
Точно знаю, не может быть, чтобы в шарпе не было решения задачи, которой есть решение в JS, так что заранее благодарю за помощь!

Автор - VolkOrievith
Дата добавления - 27 Апр 2016 в 15:02
seamanДата: Ср, 27 Апр 2016, 18:38 | Сообщение # 2
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
1. public Action[] Actions; Массив же нужен или я не понял?
2. Чтобы поля своих типов были видны в инспекторе нужен атрибут
[SerializeField]
public Action[] Actions;
Мануал
 
Сообщение1. public Action[] Actions; Массив же нужен или я не понял?
2. Чтобы поля своих типов были видны в инспекторе нужен атрибут
[SerializeField]
public Action[] Actions;
Мануал

Автор - seaman
Дата добавления - 27 Апр 2016 в 18:38
VolkOrievithДата: Чт, 05 Май 2016, 15:36 | Сообщение # 3
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Не получается. Пробовал четыре варианта впихивания [SerializeField]

Все равно не видно из инспектора.

Добавлено (05 Май 2016, 15:36)
---------------------------------------------
Все таки покопался в мануале поглубже, нашел там в Other -> Classes, там пункт Serializable.
В общем, должно быть так:
Код
public class MuveeCharacterAnimator : MonoBehaviour {
    public Action[] Actions;
    [System.Serializable]
    public class Action{
  public string Name;
  public string AnimName;
  public float ActionTime;
    }

}

Вот ссылка на страницу мануала.
Благодарю, seaman.


Сообщение отредактировал VolkOrievith - Чт, 05 Май 2016, 15:38
 
СообщениеНе получается. Пробовал четыре варианта впихивания [SerializeField]

Все равно не видно из инспектора.

Добавлено (05 Май 2016, 15:36)
---------------------------------------------
Все таки покопался в мануале поглубже, нашел там в Other -> Classes, там пункт Serializable.
В общем, должно быть так:
Код
public class MuveeCharacterAnimator : MonoBehaviour {
    public Action[] Actions;
    [System.Serializable]
    public class Action{
  public string Name;
  public string AnimName;
  public float ActionTime;
    }

}

Вот ссылка на страницу мануала.
Благодарю, seaman.

Автор - VolkOrievith
Дата добавления - 05 Май 2016 в 15:36
seamanДата: Пт, 06 Май 2016, 19:44 | Сообщение # 4
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
класс action тоже должен быть сериализуем.
Т.е. либо наследоваться от MonoBehaviour или ScriptableObject.
Либо второй вариант - иметь атрибут Serializable
 
Сообщениекласс action тоже должен быть сериализуем.
Т.е. либо наследоваться от MonoBehaviour или ScriptableObject.
Либо второй вариант - иметь атрибут Serializable

Автор - seaman
Дата добавления - 06 Май 2016 в 19:44
VolkOrievithДата: Сб, 07 Май 2016, 07:21 | Сообщение # 5
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Чтобы не начинать новую тему:
Почему при обращении к конкретной оси transform.position (например, "transform.position.y = 5;"), Юнити выдает ошибку "error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.position'. Consider storing the value in a temporary variable"?
Попытался перевести на русский, но ничего не понял.
 
СообщениеЧтобы не начинать новую тему:
Почему при обращении к конкретной оси transform.position (например, "transform.position.y = 5;"), Юнити выдает ошибку "error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.position'. Consider storing the value in a temporary variable"?
Попытался перевести на русский, но ничего не понял.

Автор - VolkOrievith
Дата добавления - 07 Май 2016 в 07:21
seamanДата: Сб, 07 Май 2016, 11:27 | Сообщение # 6
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Потому что у position.x нет set-тера.
Одно из двух - сделать свое расширение, чтобы потом легко использовать, либо каждый раз писать:
Vector3 p = transform.position;
p.y = 5;
transform.position = p;
 
СообщениеПотому что у position.x нет set-тера.
Одно из двух - сделать свое расширение, чтобы потом легко использовать, либо каждый раз писать:
Vector3 p = transform.position;
p.y = 5;
transform.position = p;

Автор - seaman
Дата добавления - 07 Май 2016 в 11:27
ЛевшаДата: Сб, 07 Май 2016, 14:02 | Сообщение # 7
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Код
transform.position = new Vector3(transform.position.x, 5, transform.position.z);


X.cor.R (Prologue)
 
Сообщение
Код
transform.position = new Vector3(transform.position.x, 5, transform.position.z);

Автор - Левша
Дата добавления - 07 Май 2016 в 14:02
VolkOrievithДата: Сб, 07 Май 2016, 19:05 | Сообщение # 8
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Левша, благодарю за способ. Нечто подобное пробовал, но, видимо, по привычке JS, забыл написать "new", и выдало ошибку.
seaman, а что такое set-тер? И если не трудно, можно по подробнее про расширение? Как минимум, для общего образования.
 
СообщениеЛевша, благодарю за способ. Нечто подобное пробовал, но, видимо, по привычке JS, забыл написать "new", и выдало ошибку.
seaman, а что такое set-тер? И если не трудно, можно по подробнее про расширение? Как минимум, для общего образования.

Автор - VolkOrievith
Дата добавления - 07 Май 2016 в 19:05
ЛевшаДата: Сб, 07 Май 2016, 21:50 | Сообщение # 9
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Цитата VolkOrievith ()
что такое set-тер?

Set - по видимому имелось ввиду применить.
Get - обращение. smile


X.cor.R (Prologue)
 
Сообщение
Цитата VolkOrievith ()
что такое set-тер?

Set - по видимому имелось ввиду применить.
Get - обращение. smile

Автор - Левша
Дата добавления - 07 Май 2016 в 21:50
VolkOrievithДата: Вс, 08 Май 2016, 12:19 | Сообщение # 10
Нет аватара
 
Сообщений: 222
Награды: 0
Репутация: 53
Статус: Offline
Понятно. Set, Get знакомы хоты бы по управлению аниматором)
А как оси могут быть без Set, если весь вектор можно изменить?

Вообще, для упрощения можно написать такие функции, типа
Код
void SetPosY ( Transform tr, float pos ){
tr.position = new Vector3 ( tr.position.x, pos, tr.position.z);
}
 
СообщениеПонятно. Set, Get знакомы хоты бы по управлению аниматором)
А как оси могут быть без Set, если весь вектор можно изменить?

Вообще, для упрощения можно написать такие функции, типа
Код
void SetPosY ( Transform tr, float pos ){
tr.position = new Vector3 ( tr.position.x, pos, tr.position.z);
}

Автор - VolkOrievith
Дата добавления - 08 Май 2016 в 12:19
seamanДата: Вт, 10 Май 2016, 00:00 | Сообщение # 11
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
По сеттерам и геттерам можно почитать МСДН
x в transform.position - это свойство у которого есть только get, set - нет.
По методам расширения ТАМ ЖЕ
 
СообщениеПо сеттерам и геттерам можно почитать МСДН
x в transform.position - это свойство у которого есть только get, set - нет.
По методам расширения ТАМ ЖЕ

Автор - seaman
Дата добавления - 10 Май 2016 в 00:00
Форум Игроделов » UNITY3D » СКРИПТИНГ » Переменная типа Arry не отображается в инспекторе. (Перехожу на C#)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024