Не силен в терминологии, сразу извините, если назову что-то не своим именем. Мне нужно чтобы была переменная 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
1. public Action[] Actions; Массив же нужен или я не понял? 2. Чтобы поля своих типов были видны в инспекторе нужен атрибут [SerializeField] public Action[] Actions; Мануал
Не получается. Пробовал четыре варианта впихивания [SerializeField]
Такой
Код
public class MuveeCharacterAnimator : MonoBehaviour { public Action[] Actions; public class Action{ [SerializeField] public string Name; [SerializeField] public string AnimName; [SerializeField] public float ActionTime; } }
Такой
Код
public class MuveeCharacterAnimator : MonoBehaviour { [SerializeField] public Action[] Actions; public class Action{ [SerializeField] public string Name; [SerializeField] public string AnimName; [SerializeField] public float ActionTime; } }
Такой
Код
public class MuveeCharacterAnimator : MonoBehaviour { [SerializeField] public Action[] Actions; public class Action{ public string Name; public string AnimName; public float ActionTime; } }
И такой
Код
public class MuveeCharacterAnimator : MonoBehaviour { [SerializeField] public Action[] Actions; [SerializeField] public class Action{ public string Name; public string AnimName; public float ActionTime; } }
Все равно не видно из инспектора.
Добавлено (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
класс action тоже должен быть сериализуем. Т.е. либо наследоваться от MonoBehaviour или ScriptableObject. Либо второй вариант - иметь атрибут Serializable
Чтобы не начинать новую тему: Почему при обращении к конкретной оси 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"? Попытался перевести на русский, но ничего не понял.
Потому что у position.x нет set-тера. Одно из двух - сделать свое расширение, чтобы потом легко использовать, либо каждый раз писать: Vector3 p = transform.position; p.y = 5; transform.position = p;
Левша, благодарю за способ. Нечто подобное пробовал, но, видимо, по привычке JS, забыл написать "new", и выдало ошибку. seaman, а что такое set-тер? И если не трудно, можно по подробнее про расширение? Как минимум, для общего образования.