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

AnimatorUpdateMode

перечисление

Описание

Управляет, когда и как компонент Animator обновляет анимации.

Используйте AnimatorUpdateMode перечисление, чтобы управлять моментом обновления анимации. От этого зависит, насколько анимации согласуются с логикой и физикой вашей игры.

  • Нормальный режим (AnimatorUpdateMode.Normal): Синхронизирует обновления анимации с игровым циклом во время фазы обновления. Используйте этот режим для анимаций, которые работают независимо от физики.
  • Фиксированный режим (AnimatorUpdateMode.Fixed): Синхронизирует обновления анимации с циклом обновления, в первую очередь для согласования с обновлениями движка физики. По умолчанию оценки физики происходят во время FixedUpdate, но вы можете настроить этот цикл в соответствии с требованиями вашего проекта. Установите Animator.animatePhysics в true для правильной обработки столкновений и других физических взаимодействий.
  • Unscaled Time (AnimatorUpdateMode.UnscaledTime): Сохраняет анимацию на скорости реального времени, не затрагиваемую масштабированием времени. Это идеально для UI элементов или эффектов, которые остаются активными, когда игра приостановлена.

Каждый режим влияет на поведение и взаимодействие анимации. Выберите режим, который соответствует потребностям вашей игры, чтобы избежать проблем, таких как пропускаемые кадры или десинхронизация.

Дополнительные ресурсы: Animator, Time, FixedUpdate, Animator.updateMode и FixedUpdate.

// This script demonstrates changing the Animator update mode when pausing the game.
// Attach this script to a GameObject with an Animator component.

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private Animator animator;
    private bool isGamePaused = false;

    void Awake()
    {
        animator = GetComponent<Animator>();
        if (animator == null)
        {
            Debug.LogError("Animator component not found!");
            return;
        }
    }

    void Start()
    {
        // Set initial animator update mode to Normal for regular gameplay
        animator.updateMode = AnimatorUpdateMode.Normal;
    }

    void Update()
    {
        // Toggle pause with the "P" key
        if (Input.GetKeyDown(KeyCode.P))
        {
            isGamePaused = !isGamePaused;
            HandlePauseState(isGamePaused);
        }

        // Handle player movement input if the game is not paused
        if (!isGamePaused)
        {
            HandleMovement();
        }
    }

    private void HandleMovement()
    {
        // Basic movement logic
        float move = Input.GetAxis("Horizontal");
        animator.SetFloat("Speed", Mathf.Abs(move));

        // Additional Movement logic can be added here
    }

    private void HandlePauseState(bool pause)
    {
        if (pause)
        {
            animator.updateMode = AnimatorUpdateMode.UnscaledTime;
            Time.timeScale = 0f;  // Pause the game
        }
        else
        {
            animator.updateMode = AnimatorUpdateMode.Normal;
            Time.timeScale = 1f;  // Resume the game
        }

        Debug.Log("Game paused: " + pause + " - Animator update mode set to: " + animator.updateMode);
    }
}

Дополнительные ресурсы: ,Animator,, ,Time,, ,FixedUpdate,, ,Animator.updateMode,.

Свойства

Свойство Описание
NormalAnimator обновления в цикле обновления, выравниваясь с основным циклом игры для стандартной обработки анимации.
FixedAnimator обновления в цикле FixedUpdate. Это идеально подходит для анимаций, основанных на физике, которые требуют независимости частоты кадров.
UnscaledTimeAnimator обновляется независимо от Time.timeScale, поддерживая прогресс анимации в реальном времени.