unity 动画控制

2023-11-09

播放控制

Animator animator;

animator.speed=0;//停止播放
animator.speed=-1;//倒放

animator.Play("stateName",0,0);//播放指定状态(stateName是Animator窗口里各个状态的名称)

跳到指定帧,并停止

Animator animator;

animator.speed=0;//停止播放

AnimationClip clip=animator.runtimeAnimatorController.animationClips[0];
float frameTime=(1f/clip.frameRate)*5;//跳到第5帧

animator.Play("stateName",0,frameTime);//播放指定状态(stateName是Animator窗口里各个状态的名称)

在动画指定的时间里,添加事件函数
注意:函数所在的脚本和Animator 组件必须绑定到同一个GameObject

using UnityEngine;
using System.Collections;

public class TestAnimationEvent:MonoBehaviour{
    
    private void Awake(){
        Animator animator=GetComponent<Animator>();//Animator组件和此脚本必须绑定到同一个GameObject
                
        AnimatorOverrideController overrideController=new AnimatorOverrideController(animator.runtimeAnimatorController);
        //通过子符串获取AnimationClip,注意并不是Animator窗口里各个状态的名称,而是在Animator窗口中选择的状态在Inspector面板的motion属性显示的名称
        AnimationClip clip=overrideController["CINEMA_4D___"];

        //在动画指定的时间,添加事件
        AnimationEvent onCompleteEvent=new AnimationEvent();
        onCompleteEvent.objectReferenceParameter=this;
        onCompleteEvent.functionName=nameof(OnAnimationClipComplete);
        onCompleteEvent.time=clip.length;//clip.length动画长度,单位为秒。这里表示在结束时添加事件
        clip.AddEvent(onCompleteEvent);
    }

    private void OnAnimationClipComplete(UnityEngine.Object objectReference){//注意:参数类型是UnityEngine.Object不是object
        //注意:当内存中拥有多个当前类的实例时,将会调用多次此函数,使用objectReferenceParameter属性传递this区分
        if(objectReference!=this)return;

        Debug.Log("onShakeAnimComplete;");
    }
}

第二种方法:
通过AnimatorStateInfo.normalizedTime判断播放完成

using UnityEngine;
using System.Collections;

public class Test:MonoBehaviour{

    public Animator animator;

    private void Awake(){
        animator.Play("attack");
        InvokeRepeating(nameof(checkStateComplete),0.02f,0.02f);
    }

    private void checkStateComplete(){
        AnimatorStateInfo stateInfo=animator.GetCurrentAnimatorStateInfo(0);
        if(stateInfo.IsName("attack")){
            //normalizedTime:表示动画的标准化时间,区间:[0,1]
            if(stateInfo.normalizedTime>=1.0f) {
                onStateComplete();
                CancelInvoke(nameof(checkStateComplete));
            }
        }
    }
    
    private void onStateComplete(){
        Debug.Log("onStateComplete");
    }
    
    private void OnDestroy(){
        CancelInvoke("checkStateComplete");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity 动画控制 的相关文章

随机推荐

  • python爬虫 -- 12306登录刷票

    coding utf 8 from splinter browser import Browser from time import sleep import traceback Message phantomjs executable n
  • centos安装rocketmq

    centos安装rocketmq 1 下载rocketmq二进制包 2 解压二进制包 3 修改broker conf 4 修改runbroker sh和runserver sh的JVM参数 5 启动NameServer和Broker 6 安
  • Linux基础知识汇总,收藏

    对于嵌入式而言 大部分人的进阶路线 单片机 gt RTOS gt Linux 下面 针对有单片机 RTOS基础的同学 分享一份入门 Linux 的基础内容 下方超长干货预警 建议先收藏 再观看 Linux 基础 操作系统 操作系统 Oper
  • linux多线程编译

    include
  • 【教程】手把手教你用Clion进行STM32开发【如何优雅の进行嵌入式开发】

    通过Clion进行嵌入式开发 一 工具安装 1 安装Clion 因为众所周知的原因 Clion的安装就不解释了 有需要的同学自行检索 2 安装STM32CubeMX 正常去官网下载最新版的安装就行了 STM32CubeMX STM32Cub
  • LRC算法的Java实现

    项目中要用到 本来想拿来主义 结果没有找到合适的 所有自己写了一个 LRC具体算法如下 1 对需要校验的数据 2n个字符 两两组成一个16进制的数值求和 2 将模值按位取反 3 加1 Java代码实现 输入byte data 返回LRC校验
  • IDEA好用的两款Java代码质量审查插件

    IDEA好用的两款Java代码质量审查插件 两款Java代码质量审查插件 Alibaba代码规约插件 使用方式 SonarLint 使用方式 两款Java代码质量审查插件 Alibaba代码规约插件 SonarLint插件 Alibaba代
  • PCL 间接平差法拟合二维直线

    目录 一 算法原理 二 代码实现 三 结果展示 四 相关链接 一 算法原理 通过传统最小二乘法对点云数据进行二维直线拟合时 可将误差只归因于一个方向上 本文假设误差只存在于 y y y轴方向上 设点云拟合的二维直线方程为 y
  • Java-GUI初步理解

    什么是GUI GUI既图形用户界面 是一种以图形为主体的交互方式 主要包括AWT组件以及Swing组件以及容器 布局和事件相关的类接口 AWT是抽象窗口工具包的简称 其中有像窗口 按钮等组件 而Swing是基于AWT开发的 他的功能更加强大
  • ESP32+idf开发之WIFI通信入门(2)station网络连接

    ESP32 idf开发之WIFI通信入门 2 station网络连接 1 新建工程项目ctrl shift p 选择new project 输入项目名 选择合适项目路径 选择对应的开发板 此处选择自定义 target选择ESP32 moud
  • 数据库管理员DBA

    数据库管理员DBA什么是DBA 数据库管理员 英文是Database Administrator 简称DBA 这个职位对不同的人意味着不同的意义 一个小的软件开发工作室和一个分工高度明细的大公司相比 DBA的职责来得更加宽泛一些 一个公司
  • JVM-垃圾收集算法

    目录 1 分代收集理论 2 标记 清除算法 3 标记 复制算法 4 标记 整理算法 1 分代收集理论 分代思想也很简单 就是根据对象的生命周期将内存划分 然后进行分区管理 当前商业虚拟机的垃圾收集器大多数都遵循了 分代收集 Generati
  • 登录工程三:现代Web应用中的身份验证实践

    登录系统 首先 我们要为 登录 做一个简要的定义 令后续的讲述更准确 之前的两篇文章有意无意地混淆了 登录 与 身份验证 的说法 因为在本篇之前 不少 传统Web应用 都将对身份的识别看作整个登录的过程 很少出现像企业应用环境中那样复杂的情
  • 2023华为OD机试真题【开租建站】

    题目 当前IT部门支撑了子公司颗粒化业务 该部门需要实现为子公司快速开租建站的能力 建站是指在一个全新的环境部署一套IT服务 每个站点开站会由一系列部署任务项构成 每个任务项部署完成时间都是固定和相等的 设为1 部署任务项之间可能存在依赖
  • Excel:Excel中对特殊字符的转义和处理

    对引号转义 excel公式中用两个引号代表一个引号 abc abc 会得到abc abc abc 会得到字符串 abc 处理换行符 公式中如果需要字符串换行 这样写 换 CHAR 10 行 在单元格里输入换行符 用Alt Enter输入 在
  • pywinauto 使用

    Pywinauto是基于Python开发的 用于自动化测试的脚本模块 主要操作于Windows标准图形界面 它可以允许你很容易的发送鼠标 键盘动作给Windows的对话框和控件 其中 最主要功能为对windows标准控件的一系列动作可编程处
  • tiny-cnn执行过程分析(MNIST)

    在http blog csdn net fengbingchun article details 50573841中以MNIST为例对tiny cnn的使用进行了介绍 下面对其执行过程进行分析 支持两种损失函数 1 mean squared
  • JWT介绍

    JWT介绍 1 1 jwt原则 最简单理解 jwt本质就是 把用户信息通过加密后生成的一个字符串 JWT的原则是在服务器身份验证之后 将生成一个JSON对象并将其发送回用户 UserName Chongchong Role Admin Ex
  • Ubuntu安装scrapy

    先检查是否安装过lxml openSSL 没有的话 得安装依赖包了 安装lxml 参考官网安装 http lxml de installation html 如果python是2 x的 用以下命令 sudo apt get install
  • unity 动画控制

    播放控制 Animator animator animator speed 0 停止播放 animator speed 1 倒放 animator Play stateName 0 0 播放指定状态 stateName是Animator窗口