Перед выходом XNA GS 3.1 для многих остается загадкой, что же из себя представляет Avatar API? Я вкратце попытаюсь прояснить ситуацию и объяснить, что же все-таки ожидать от этого Avatar API.
Есть три основных класса для орисовки и анимации персонажа.
AvatarDescription
У каждого персонажа есть описатель, который описывает, как он выглядит, и какая одежда на нем одета. Объект описателя сообщает системе, какие использовать модели, текстуры, цвета и масштабы для отрисовки. Также есть такие параметры, как высота в метрах, тип тела (мужское, женское). Объект AvatarDescrition можно создать тремя способами. Во-первых, это прочитать свойство Avatar любого подключенного игрока (SingedInGamer) . Второй способ, использую статический метод объекта AvatarDescrition, создать случайно сгенерированное описание. И третий способ для пересылки AvatarDescrition по сети или сохранения в файл в качестве бинарных данных, с последующей пересылкой и восстановления описателя из массива байтов.
AvatarRenderer
Как можно догадаться объект AvatarRenderer отвечает за отрисовку персонажа. Вы создаете объект AvatarRenderer, передавая в конструктор экземпляр объекта описателя. Для отрисовки персонажа на экране необходимо передать значения мировой, видовой и матрицы проектции в соответствующие свойства AvatarRenderer`a и просто вызвать метод Draw. Который в свою очередь принимает два параметра. Первый – это список костей в виде IList. Это фактически перечень трансформаций для каждого меша нашего персонажа. Кости имеют локальную зависимость по отношению к их родителю. Персонаж содержит в общей сложности 71 кость. Второй параметр – AvatarExpression. Для отрисовки рта, глаз, бровей используются текстуры. Объект AvatarExpression – это структура, содержащая значения для описания параметров рта, глаз и бровей. Встает закономерный вопрос, где же нам брать списки костей и описатели выражений, ответ – использовать объект AvatarAnimation.
AvatarAnimation
Существует всего 31 встроенная анимация, которые могут воспользоваться разработчики в процессе создания своей игры. Большинство этих анимаций Вы можете наблюдать на DashBoard консоли. Объект AvatarAnimation создается с передачей значения перечисления AvatarAnimationPreset в конструктор. После создания объекта Вы должны выставить текущее время анимации. После установки времени, у Вас есть доступ к объектам костей и выражений, которые понадобятся для метода AvatarRenderer.Draw(), к которым у Вас есть доступ через свойства BoneTransforms и Expressions.
Давайте взглянем, как это будет выглядеть в коде.
В методе инициализации игры создадим описание, отрисовщик и анимацию.