Unity 6.3
0 онлайн 63 гостей 3 в системе
Вход

AnimatorOverrideController

класс в UnityEngine

Наследуется от:RuntimeAnimatorController

Выполнено в:UnityEngine.AnimationModule

Описание

Интерфейс для управления Animator Override Controller.

Animator Override Controller служит для переопределения клипов анимации из контроллера, чтобы адаптировать анимации под конкретный Avatar. Подмена Animator.runtimeAnimatorController с AnimatorOverrideController на основе того же AnimatorController во время выполнения не сбрасывает текущее состояние машины состояний.

Существует три способа использования Контроллера Переопределения Animator.
1. Создайте в Редакторе Контроллер Переопределения Animator.
2. Изменение одного анимационного клипа на кадр во время выполнения (базовый вариант использования).
В этом случае оператор индексирования AnimatorOverrideController.this[string] может быть использован, но будьте осторожны, так как каждый вызов будет вызывать перераспределение привязок клипа аниматора.

using UnityEngine;

public class SwapWeapon : MonoBehaviour { public AnimationClip[] weaponAnimationClip;

protected Animator animator; protected AnimatorOverrideController animatorOverrideController;

protected int weaponIndex;

public void Start() { animator = GetComponent<Animator>(); weaponIndex = 0;

animatorOverrideController = new AnimatorOverrideController(animator.runtimeAnimatorController); animator.runtimeAnimatorController = animatorOverrideController; }

public void Update() { if (Input.GetButtonDown("NextWeapon")) { weaponIndex = (weaponIndex + 1) % weaponAnimationClip.Length; animatorOverrideController["shot"] = weaponAnimationClip[weaponIndex]; } } }

3. Изменение многих анимационных клипов на кадр во время выполнения (Продвинутый случай использования).
Метод AnimatorOverrideController.ApplyOverrides хорошо подходит для этого случая, так как он уменьшает количество перераспределений привязок клипа аниматора до одного за вызов.

using UnityEngine;
using System.Collections.Generic;

public class AnimationClipOverrides : List<KeyValuePair<AnimationClip, AnimationClip>> { public AnimationClipOverrides(int capacity) : base(capacity) {}

public AnimationClip this[string name] { get { return this.Find(x => x.Key.name.Equals(name)).Value; } set { int index = this.FindIndex(x => x.Key.name.Equals(name)); if (index != -1) this[index] = new KeyValuePair<AnimationClip, AnimationClip>(this[index].Key, value); } } }

public class Weapon { public AnimationClip singleAttack; public AnimationClip comboAttack; public AnimationClip dashAttack; public AnimationClip smashAttack; }

public class SwapWeapon : MonoBehaviour { public Weapon[] weapons;

protected Animator animator; protected AnimatorOverrideController animatorOverrideController;

protected int weaponIndex;

protected AnimationClipOverrides clipOverrides; public void Start() { animator = GetComponent<Animator>(); weaponIndex = 0;

animatorOverrideController = new AnimatorOverrideController(animator.runtimeAnimatorController); animator.runtimeAnimatorController = animatorOverrideController;

clipOverrides = new AnimationClipOverrides(animatorOverrideController.overridesCount); animatorOverrideController.GetOverrides(clipOverrides); }

public void Update() { if (Input.GetButtonDown("NextWeapon")) { weaponIndex = (weaponIndex + 1) % weapons.Length; clipOverrides["SingleAttack"] = weapons[weaponIndex].singleAttack; clipOverrides["ComboAttack"] = weapons[weaponIndex].comboAttack; clipOverrides["DashAttack"] = weapons[weaponIndex].dashAttack; clipOverrides["SmashAttack"] = weapons[weaponIndex].smashAttack; animatorOverrideController.ApplyOverrides(clipOverrides); } } }

Свойства

Свойство Описание
overridesCountВозвращает число переопределений.
runtimeAnimatorControllerКонтроллер времени выполнения Animator, который переопределяет Контроллер переопределения Animator.
это[строка]Возвращает либо переопределяющий анимационный клип, если установлен, либо оригинальный анимационный клип с именем.

Конструкторы

Конструктор Описание
AnimatorOverrideControllerСоздает пустой Контроллер Переопределения Animator.

Открытые методы

Метод Описание
ApplyOverridesПрименяет список переопределений к этому Animator Контроллеру Переопределений.
GetOverridesПолучает список переопределений клипа Animation, определенных в данный момент в контроллере переопределений Animator.
Унаследованные члены 4

Свойства

СвойствоОписание
hideFlagsДолжен ли объект быть скрытым, сохраняться с Scene или изменяться пользователем?
nameИмя объекта.
animationClipsПолучает все AnimationClip, используемые контроллером.

Открытые методы

МетодОписание
GetInstanceIDПолучает экземпляр ID объекта.
ToStringВозвращает имя объекта.

Статические методы

МетодОписание
DestroyУдаляет GameObject, компонент или ресурс.
DestroyImmediateНемедленно уничтожает указанный объект. Используйте с осторожностью и только в режиме редактирования.
DontDestroyOnLoadНе уничтожать целевой Объект при загрузке нового Scene.
FindAnyObjectByTypeПолучает любой активный загруженный объект типа Type.
FindFirstObjectByTypeПолучает первый активный загруженный объект типа Type.
FindObjectsByTypeПолучает список всех загруженных объектов типа Type.
InstantiateКлонирует исходный объект и возвращает клон.
InstantiateAsyncЗахватывает моментальный снимок первоначального объекта (который должен быть связан с каким-либо GameObject) и возвращает AsyncInstantiateOperation.

Операторы

ОператорОписание
boolСуществует ли объект?
оператор!=Сравнивает, если два объекта ссылаются на разные объекты.
оператор ==Сравнение двух ссылок на объекты для определения того, относятся ли они к одному и тому же объекту.