Unity动画控制

2023-11-11

1、Trigger控制动画状态重复播放

/// <summary>
    /// 清除所有的激活中的trigger缓存
    /// </summary>
    public void ResetAllTriggers(Animator animator)
    {
        AnimatorControllerParameter[] aps = animator.parameters;
        for (int i = 0; i < aps.Length; i++)
        {
            AnimatorControllerParameter paramItem = aps[i];
            if (paramItem.type == AnimatorControllerParameterType.Trigger)
            {
                string triggerName = paramItem.name;
                bool isActive = animator.GetBool(triggerName);
                if (isActive)
                {
                    animator.ResetTrigger(triggerName);
                }
            }
        }
    }

2、Animation 动画K帧循环动画过渡卡顿

3、禁用动画资源是自带位移的

 

4、控制动画播放 暂停加速倒播

倒播需要设置参数控制

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ZRAnimatorControl : MonoBehaviour {

    /*
     animator所处的state播放完毕,如果未进入下一个state,且没有循环,
     则该state的normalizedtime会大于1(state末尾)或小于0(负数,倒播到开头处,speed为负数);
     如果此时触发条件进入下一个state,则会由于normalizedtime不是1,或0,
     有一段时间延迟(1.xxx-->1或-0.xxx---->0),要解决滞后,可以这样:
     获取normalizedtime:animator.getcurrentanimatorstateinfo(layer).normalizedtime;
     animator.play("statename".layernumber,normalizedtime);设置状态所处特定帧;
     */


    Animator Animator;
    // Use this for initialization
    void Start () {
        Animator = this.GetComponent<Animator>();
    }
    
    // Update is called once per frame
    void Update () {
        
    }
    private void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 100, 40), "正常从开始处播动画"))
        {
            // 1、设置动画机播放的动画名称,动画控制层,动画播放到某时刻

            // 2、设置为最初的动画名称即重置动画到最初状态

            // 3、Update(0)即是刷新 0 层的 动画机,默认新建的动画在 0 层

            Animator.Play("01CZAnimation", 0, 0);//刷新动画到某个时刻
            Animator.Update(0);
            Animator.SetFloat("speed",1);
        }

        if (GUI.Button(new Rect(0, 40, 100, 40), "正常结束后反播动画"))
        {
            //这样会有等待延迟因为NormalizedTime在一直录制增加,并没有在动画播放完时停止,倒放需要等待录制时间回退完
            //Animator.ForceStateNormalizedTime
            Animator.Play("01CZAnimation",0,1);
            Animator.Update(0);
            Animator.SetFloat("speed", -1);
        }

    }
}

5、动画融合和动画混合

  主要是用骨骼遮罩,暂时没搞这么麻烦的动画

6、动画混合树Blend Tree 就是一个参数控制多个随机状态

一个Blend Tree其实也就是一个状态,和状态不同的地方就是一个状态只能设定一个动画,而一个Blend Tree则可以设定为多个动画的混合。

双击Run就可以进入混合树的编辑界面。

右击我们的混合树添加3Motion,如下:

https://images2015.cnblogs.com/blog/223374/201509/223374-20150924111323053-1520574703.jpg

同时我们设定好3个方向的跑动动画:

https://images2015.cnblogs.com/blog/223374/201509/223374-20150924111600490-1545899459.jpg

我们还需要设定一个名为DirectionFloat类型的参数来控制这个混合树:

https://images2015.cnblogs.com/blog/223374/201509/223374-20150924112710553-1027459644.jpg

7、动态绑定动画事件(不建议这样使用)

//动画事件不能检测到父物体脚步;

//动态事件要检测只绑定一次

 RuntimeAnimatorController ranimator;
    AnimationClip[] clips = null;
    //自动播放的动画通过exit退出回到idle后为该动画片段添加事件重置动画状态
    public void RegisterAnimationEvent()
    {
        // 获取运行时运行时动画器控制器ResetAnimationState()
        ranimator = animator.runtimeAnimatorController;
        clips = ranimator.animationClips;
        for (int i = 0; i < clips.Length; i++)
        {
            //Debug.Log(clips[i].name);
            //if (clips[i].events.Length == 0)
            //{
                switch (clips[i].name)
                {
                    case "Idle":
                        {
                            //Debug.Log("重置动画状态");
                            //这里演示注册三个函数分别在动画开始,中途,结尾
                            AnimationEvent m_animator_Start = new AnimationEvent();
                            //AnimationEvent m_animator_Running = new AnimationEvent();
                            //AnimationEvent m_animator_End = new AnimationEvent();
                            //对应事件触发相应函数的名称
                            m_animator_Start.functionName = "ResetAnimationState";
                            //m_animator_Running.functionName = "ResetAnimationState";
                            //m_animator_End.functionName = "ResetAnimationState";
                            //设定对应事件在相应动画时间轴上的触发时间点
                            m_animator_Start.time = 0;
                            //m_animator_Running.time = clips[i].length * 0.5f;//中间
                            //m_animator_End.time = clips[i].length;
                            //把事件添加到时间轴上
                            clips[i].AddEvent(m_animator_Start);
                           // clips[i].AddEvent(m_animator_Running);
                           // clips[i].AddEvent(m_animator_End);
                            //clips[i].events = default(AnimationEvent[]);//注销
                        }

                        break;
                }
            //}
            //这里绑定音效后有延迟原因不明
            //AnimationEvent m_animator_StartAudio = new AnimationEvent();
            //m_animator_StartAudio.functionName = "PlayerAudio";
            //m_animator_StartAudio.time = 0;
            //clips[i].AddEvent(m_animator_StartAudio);
        }

       animator.Rebind();
    }

8、动画资源绑定的事件,在所有引用的prefab上都会触发,资源和事件是唯一对应关系,复用资源也必须使用其绑定的事件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity动画控制 的相关文章

  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • Unity Shader入门精要第七章 基础纹理之遮罩纹理

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一 实践 参考 前言 遮罩纹理 mask texture 是本章要介绍的最后一种纹理 它非常有用 在很多商业游戏中 都可以见到它的身影 那么什么是遮罩呢 简单来讲 遮罩允许我们
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • mixamo根动画导入UE5问题:滑铲

    最近想做一个跑酷游戏 从mixamo下载滑铲动作后 出了很多动画的问题 花了两周时间 终于是把所有的问题基本上都解决了 常见问题 1 动画序列 人物不移动 2 动画序列 人物移动朝向错误 3 蒙太奇 人物移动后会被拉回 4 蒙太奇 动画移动
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • VS2022 | 显示Unreal Engine日志

    VS2022 显示Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发常见操作梳理之角色选择一

    进入游戏后 我们经常会进入角色选择的界面 通常是左右两个按钮可以更改角色供玩家选择 对于这种界面我们通常使用数据持久化将角色信息存储起来 接下来的笔记中 我将使用自带的数据持久化系统对其进行操作 实现角色的选择页面 后续会更新xml系列的文
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • 一文读懂 PyTorch 显存管理机制

    点击上方 视学算法 选择加 星标 或 置顶 重磅干货 第一时间送达 作者丨米阿罗 知乎 已授权 来源丨https zhuanlan zhihu com p 486360176 编辑丨极市平台 首发于踢翻炼丹炉 https www zhihu
  • Oracle Sql Loader中文字符导入乱码的解决方案

    Oracle Sql Loader中文字符导入乱码的解决方案 服务器端字符集NLS LANG SIMPLIFIED CHINESE CHINA ZHS16GBK 控制文件ctl LOAD DATA CHARACTERSET ZHS16GBK
  • linux下安装jdk8

    jdk官网下载地址 官网下载页 https www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 解压 解压到指定目录下 tar xzvf
  • RecycleView的scrollbar在xml中默认显示以及在代码中隐藏

  • MongoDB 启动及常用操作(随记)

    首先是启动服务 下面是一些常用的操作 mongoose 链接 var mongoose require mongoose var db mongoose createConnection mongodb 127 0 0 1 27017 No
  • MySQL MHA

    1 什么是 MHA MHA MasterHigh Availability 是一套优秀的MySQL高可用环境下故障切换和主从复制的软件 MHA 的出现就是解决MySQL 单点的问题 MySQL故障切换过程中 MHA能做到0 30秒内自动完成
  • 在美团,我从暑期实习到转正

    作者 酸菜鱼摆摆 整理 NewBeeNLP https zhuanlan zhihu com p 54732860 近期各个公司的秋招都陆续开始了 今天分享学妹 摆摆 的美团暑期实习转正经验 非常详细 今年参加秋招的同学可以好好看看噢 有问
  • python反编译chm文件并生成pdf文件

    1 coding utf 8 2 3 import os 4 import os path 5 import logging 6 import pdfkit 7 8 original chm r C Users hushaojun Docu
  • minio开源的对象存储服务器安装及使用

    1 minio的介绍 MinIO是一个开源的对象存储服务器 设计用于实现高性能 可扩展的云存储 它兼容Amazon S3云存储服务的API 因此可以与现有的S3兼容应用程序进行集成 MinIO可以部署在本地服务器 私有云环境或公共云上 如A
  • Burg法参数化功率谱估计(Python实现版)

    Burg法参数化功率谱估计是在Yule Walker方程法和Levinson Durbin快速递推法之上建立的 如果对于Yule Walker方程法和Levinson Durbin快速递推法不熟悉的话可以参考我的其他博客 Levinson
  • VS2015下封装Qt ui界面为dll的做法

    VS2015下封装Qt ui文件为dll的做法 最近被要求将以前项目的比较复杂的ui界面及其内部函数封装成dll 在网上查阅了一些资料 发现大部分要么是vs封装qt无界面的 要么是qt creator封装成dll的 有一篇较好的参考是htt
  • elasticsearch-head如何连接设置密码的elasticsearch

    先修改配置 在elasticsearch yml文件中加入以下配置 配置开启跨域 http cors enabled true 配置允许任何域名访问 http cors allow origin 设置密码后的访问配置 http cors a
  • defaulted函数和deleted函数

    Defaulted 函数 背景问题 C 的类有四类特殊成员函数 它们分别是 默认构造函数 析构函数 拷贝构造函数以及拷贝赋值运算符 如果程序员没有显式地为一个类定义某个特殊成员函数 而又需要用到该特殊成员函数时 则编译器会隐式的为这个类生成
  • 完整NFT Web开发

    完整NFT Web开发课程 自互联网早期以来 NFT 作为最具颠覆性的技术 区块链 的一部分 正在改变世界开展业务的方式 你可以构建和学习如何使用它们来塑造现代数字艺术 游戏 和网络应用程序 本课程教你如何从头开始深入构建 NFT 市场 以
  • 解决Nginx的location中root与alias区别——配置找不到路径的原因

    要理解root与alias的区别 例一 注意location中的配置 server listen 8080 server name localhost location root html index index html index ht
  • Java dom4j如何获取,添加,删除,查找,设置Element属性呢?

    转自 Java dom4j如何获取 添加 删除 查找 设置Element属性呢 下文讲述dom4j操作Element属性的方法分享 如下所示 取得某节点下的某属性 Element root document getRootElement A
  • 24.绳子切割

    目录 题目 Description Input Output 思路 注意事项 C 完整代码 题目 Description 有N条绳子 它们的长度分别为Li Li都是正整数 如果从它们中切割出K条长度相同的绳子 绳子的长度为整数 这K条绳子每
  • Windows7不再卡五叶草,更新了bootx64.efi和bootmgfw.efi文件,支持安全启动,不用关闭安全启动和打开csm支持.

    如题 微软最近为Windows7的64位系统更新了bootx64 efi和bootmgfw efi文件 然后Windows7的64位系统就支持了更新的平台 而且支持安全启动 不用关闭安全启动和打开csm支持 已在Intel10代和12代平台
  • Gitlab----设置页面语言为简体中文

    原文链接 1 简介 gitlab为每个用户提供了个性化设置 即用户登录之后设置页面的语言之后 并不影响其他人的页面的语言 如此就解决了有的人喜欢看中文界面 有的人喜欢看英文界面 当然如果会其他国语言也可以同样设置自己喜欢的语言 2 用户登录
  • Unity动画控制

    1 Trigger控制动画状态重复播放