Руководство API скрипты

AnimatorOverrideController

класс в UnityEngine / Наследует от: RuntimeAnimatorController / Реализовано в: UnityEngine.AnimationModule

Описание

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

Контроллер переопределения аниматора используется для переопределения анимационных клипов из контроллера для специализации анимации для данного аватара. Замена Animator.runtimeAnimatorController на AnimatorOverrideController на основе того же AnimatorController a> во время выполнения не сбрасывает текущее состояние конечного автомата.

Существует три способа использования Animator Override Controller.

1. Создайте контроллер переопределения аниматора в редакторе.

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 : ListAnimationClip, 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 Контроллер аниматора среды выполнения, который переопределяет контроллер переопределения аниматора.
this[string] Возвращает либо переопределяющий анимационный клип, если он установлен, либо исходный анимационный клип с именем.

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

AnimatorOverrideController Создает пустой контроллер переопределения аниматора.

Публичные Методы

ApplyOverrides Применяет список переопределений к этому контроллеру переопределения Animator.
GetOverrides Получает список переопределений анимационного клипа, определенных в данный момент в этом контроллере переопределения аниматора.

Унаследованные члены

Свойства

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

Публичные Методы

GetInstanceID Возвращает id экземпляра объекта.
ToString Возвращает имя объекта.

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

Destroy Удаляет игровой объект, компонент или актив.
DestroyImmediate Уничтожает объект obj. Вместо этого рекомендуется использовать метод Destroy.
DontDestroyOnLoad Не уничтожает целевой объект при загрузке новой сцены. .
FindObjectOfType Возвращает первый активный загруженный объект.
FindObjectsOfType Получает список всех загруженных объектов.
Instantiate Клонирует исходный объект и возвращает клон.

Операторы

bool Объект существует?
operator != Сравнивает, ссылаются ли два объекта на другой объект.
operator == Сравнивает две ссылки на объекты, чтобы определить, ссылаются ли они на один и тот же объект.
Вы можете отблагодарить автора, за перевод документации на русский язык. Донат
API скрипты 2021.3