Представление контроллера Animator, оптимизированное для времени выполнения.
Во время выполнения Unity заменяет AnimatorController класс этим оптимизированным классом времени выполнения. Доступ к функциям редактора — например, к изменению структуры Animator Controller — ограничен.
Этот оптимизированный класс предлагает несколько способов обращаться к Animator Controller и изменять его во время выполнения:
- Хранит ссылку на Контроллер Animator, чтобы можно было заменить Контроллер Animator Контроллером Animator. Это полезно для изменения структуры Контроллера Animator во время выполнения. Используйте Animator.runtimeAnimatorController для доступа к контроллеру, который нужно заменить.
- Создать AnimatorOverrideController который позволяет переопределить клипы анимации, связанные с Animator Controller. Это эффективнее замены контроллера, поскольку обновляются только клипы. Animator Override Controller строится на том Runtime Animator Controller, которым он инициализирован. Дополнительные ресурсы: AnimatorOverrideController.runtimeAnimatorController.
В следующем примере показано, как создать GameObjects во время выполнения. Каждый GameObject анимирован различными Animator Контроллерами.
// This script spawns random zombie prefabs at runtime. The Animator component for
// each zombie is assigned a different Animator Controller based on the zombie type.
using UnityEngine;
public class RandomZombieSpawner : MonoBehaviour
{
// The prefab of the zombie Game Object containing an Animator component.
public GameObject zombiePrefab;
// Store the references to the Animator Controllers for the different zombie types that can be spawned
public RuntimeAnimatorController standardZombieAnimator;
public RuntimeAnimatorController bigZombieAnimator;
public RuntimeAnimatorController smallZombieAnimator;
void Start()
{
for (var i = 0; i < 10; i++)
{
SpawnZombie();
}
}
public void SpawnZombie()
{
// Instantiate a new zombie Game Object at a random position
GameObject zombie = Instantiate(zombiePrefab, new Vector3(Random.Range(0f, 10f), 0, Random.Range(0f, 10f)), Quaternion.identity);
Animator animator = zombie.GetComponent<Animator>();
// Randomly determine the type of zombie and assign its Animator with its corresponding Animator Controller.
var randomValue = Random.Range(0f, 1f);
if (randomValue <= 0.3f)
{
animator.runtimeAnimatorController = bigZombieAnimator;
zombie.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);
}
else if (randomValue <= 0.6f)
{
animator.runtimeAnimatorController = smallZombieAnimator;
zombie.transform.localScale = new Vector3(0.75f, 0.75f, 0.75f);
}
else
{
animator.runtimeAnimatorController = standardZombieAnimator;
}
}
}