动作游戏网游:帧同步下的动画同步

帧同步的方案下,逻辑层需要与渲染帧解耦,比如一秒固定30帧。这个还算比较容易实现的,重点是动画的表现也需要同步。

如果需要动画同步,则不能使用unity动画自驱,而是需要用进度控制。

unity开放了这种功能的接口,使用animator.Play(AnimName, AnimLayerIndex, progress);来调用。

实现功能的脚本如下:

cs 复制代码
using UnityEngine;

public class MoveAnimationController : MonoBehaviour
{
    [Tooltip("角色的Animator组件")]
    public Animator animator;
    [Tooltip("当前动画进度(0~1,可手动拖曳测试)")]
    [Range(0f, 1f)] public float moveProgress = 0f;

    // 动画状态的层索引(默认是0,只有一个层时不用改)
    public int AnimLayerIndex = 0;
    // 动画名称(要和Animator中的状态名一致)
    public string AnimName = "Move";

    private void Start()
    {
        // 初始化:如果没赋值Animator,自动获取
        if (animator == null)
        {
            animator = GetComponent<Animator>();
        }
        // 冻结动画速度(关键:禁止Animator自动播放)
        animator.speed = 0f;
    }

    private void Update()
    {
        // 实时更新动画进度(你可以在任何地方修改moveProgress,比如逻辑层计算后赋值)
        UpdateMoveAnimationProgress(moveProgress);
    }

    /// <summary>
    /// 控制Move动画的进度
    /// </summary>
    /// <param name="progress">0~1的进度值</param>
    public void UpdateMoveAnimationProgress(float progress)
    {
        // 钳制进度在0~1之间,防止异常
        progress = Mathf.Clamp01(progress);

        // 核心API:播放指定动画,并设置归一化时间(进度)
        // 参数1:动画名称;参数2:层索引;参数3:归一化时间(0=开头,1=结尾)
        animator.Play(AnimName, AnimLayerIndex, progress);

        // 再次确认冻结速度(防止其他逻辑修改了speed)
        animator.speed = 0f;
    }
}

实现效果如下:

通过拖动可以看到动画的变化。

相关推荐
avi91117 分钟前
[AI教做人]CinemachineCamera 各项调整配置参数入门 + Profiler
unity·游戏开发·camera·cinemachine·visual camera·镜头配置
郝学胜-神的一滴1 天前
[简化版 GAMES 101] 计算机图形学 16:纹理走样、Mipmap、三线性插值、各向异性过滤原理全解
unity·游戏引擎·godot·图形渲染·three.js·opengl·unreal
2301_767113982 天前
Superpowers 游戏引擎从零开发实战指南
游戏引擎
吴梓穆2 天前
untiy TextMeshPro (TMP) text 操作 中文字符集 字体材质操作(添加纹理 添加描边 添加阴影)
unity
想你依然心痛2 天前
嵌入式单元测试:Unity/CMock框架与硬件在环测试——测试驱动、桩函数
unity·单元测试·游戏引擎
yangmu32032 天前
《星露谷物语》MOD配置与实战安装综合指南
游戏·游戏引擎·游戏程序
xcLeigh2 天前
Unity基础:Game视图详解——游戏预览、分辨率模拟与性能显示
游戏·unity·游戏引擎·音频·视频·game·play模式
ZJU_fish19962 天前
全局光照/阴影的几个常见问题
游戏引擎·图形渲染
IT·陈寒2 天前
Superpowers 游戏引擎核心应用场景与落地指南
游戏引擎
xcLeigh2 天前
Unity基础:Scene视图操作完全指南——视角控制、物体选择与场景导航
unity·游戏引擎·scene·试图·场景导航