Unity UI或3d模型的动画控制(Animation类)

2023-10-27


Animation动画控制类

在Unity中,我们可以使用2D的Spine动画来制作核心战斗模块,当然也能用3D模型来制作,这时候我们需要学会使用的工具类就是Unity为我们提供的Animation动画控制类。

当我们将一个模型导入Unity中时,我们可以看到资源文件下有Animations和Materials两个目录,它们分别用于存放此3D模型的动画和材质。

一、动画设置:

    在Animations目录下随便选中一个动画文件(以.anim为后缀),在属性(Inspector)面板中查看它的相关属性:

我们可以看到这里设置的主要就是此动画的播放方式有五种:Default、Once、Loop、Ping Pong、Clamp Forever,但在实际使用中:

Default和Once以及Clamp Forever并无明显区别,都是播放一次停止在最后一帧

Loop:无限地循环播放动画

Ping Pong:顾名思义就是反弹的意思,它的执行方式就是执行完一次动作之后反过来倒序执行一次回到初始状态。

二、模型的动作选择:

选中我们当前操作的模型,在Inspector中可以看到模型下面绑定了一个动画控制器,其中第一个属性Animation就是此模型的默认动作,切换动作其实就是通过改变这个属性的值来实现的:

在模型的控制脚本中,我们可以声明一个公有的Animation对象,然后通过拖拽的方式在属性面板中为这个对象进行赋值:

三、关键方法:

Animation类在控制动作的方法中,比较常用的有:Play、Stop、PlayQueued、IsPlaying和AddClip

1.Play:播放一个动作的接口,但必须是在之前的动作播放完的前提下再调用才有效,假如正在执行其他动作,则调用此方法无效

2.Stop:无论当前是否正在执行动作,都立即停止在当前帧

3.PlayQueued:添加多个动作队列的时候调用,此时模型会依次执行队列中的动作,可用于动作拼接

4.IsPlaying:判断当前是否正在执行动作

5.AddClip:添加一个动画裁剪,即可只播放指定起点帧到终点帧部分的动作内容

四:实践展示:

在场景中放置一个模型,并用UGUI放置三个按钮,用于切换动作,预览图如下:

在Canvas下我们绑定了模型的控制脚本ModelController:


<span style="font-size:18px;">using UnityEngine;
using System.Collections;
using UnityEngine.UI;
 
public class ModelController : MonoBehaviour {
	public Animation mAnimation;
	
	Button button_run,button_walk, button_attack;
	// Use this for initialization
	void Start () {
        /*Transform model_obj = GameObject.Find("qiya").transform;
        Animation animation = model_obj.GetComponent<Animation>();
        Debug.Log("length");
        animation.Stop();*/
        button_run = transform.FindChild("Button_run").GetComponent<Button>();
		button_walk = transform.FindChild("Button_walk").GetComponent<Button>();
        button_attack = transform.FindChild("Button_jump").GetComponent<Button>();
		
		EventTriggerListener.Get(button_run.gameObject).onClick = OnButtonClick;
		EventTriggerListener.Get(button_walk.gameObject).onClick = OnButtonClick;
		EventTriggerListener.Get(button_attack.gameObject).onClick = OnButtonClick;
	}
 
    /// <summary>
    /// 在这里监听按钮的点击事件
    /// </summary>
    /// <param name="go"></param>
    private void OnButtonClick(GameObject go) {
        if (go == button_run.gameObject){
            //确保可以立即切换动作
            mAnimation.Stop();
			mAnimation.Play("move");
        }else if (go == button_walk.gameObject){
            mAnimation.Stop();
            AnimationClip clip = mAnimation.clip;
            //添加一个剪辑,设置起始帧与结束帧
            mAnimation.AddClip(clip, "walk",0,10,false);
            mAnimation.Play("walk");
        }
        else if (go == button_attack.gameObject){
            mAnimation.Stop();
            //保证第一个动画播放完毕在播放第二个动画
            mAnimation.PlayQueued("attack0",QueueMode.PlayNow);
            mAnimation.PlayQueued("idle0", QueueMode.CompleteOthers);
        }
    }
	
	// Update is called once per frame
	void Update () {
	
	}
}
</span>

如此,我们就实现了模型动作切换的处理。

五、控制模型移动:

移动包括两种形式:水平移动和旋转

首先,我们需要设定两个常数:水平移动速度(TranslateSpeed)和中心旋转速度(RotateSpeed),然后通过获取模型的transform组件,然后调用相应的方法来实现模型的移动,例如:
//向前移动
model_obj.Translate(Vector3.forward * Time.deltaTime * TranslateSpeed);
//向后移动
model_obj.Translate(Vector3.forward * Time.deltaTime * (-TranslateSpeed));
//向右旋转
model_obj.Rotate(Vector3.up * Time.deltaTime * RotateSpeed);
//向左旋转
model_obj.Rotate(Vector3.up * Time.deltaTime * (-RotateSpeed));

————————————————
版权声明:本文为CSDN博主「河乐不为」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/linshuhe1/article/details/51130401

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

Unity UI或3d模型的动画控制(Animation类) 的相关文章

  • asp:repeater 折叠表行 - 已更新

    我想知道是否有人对我的问题有创造性的解决方案 我有一个从我的数据库填充的转发器 如下所示
  • 全局变量不好

    好吧 读完这篇文章和一些示例后 我仍然不清楚全局变量的含义 那么你的类中的私有变量是全局的吗 http www c2 com cgi wiki GlobalVariablesAreBad http www c2 com cgi wiki G
  • StackExchange Redis 删除所有以以下开头的键

    我有一个格式的密钥 Error 1 Error 24 Error 32 Using StackExchange Redis 我该怎么办KeyDelete在与格式匹配的所有键上Error 在另一个答案中我看到了 LUA 脚本 EVAL ret
  • 如何获取枚举数作为常量?

    From 枚举中定义的项目总数 https stackoverflow com questions 856154 total number of items defined in an enum 我发现我可以使用以下方法获取枚举数 Enum
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 没有配置身份验证处理程序来处理该方案

    这是一个非常烦人的问题 我在我的 asp net core 项目上设置 cookie 身份验证 有时会出现此错误 有时不会 没有图案 它只是开始抛出错误 然后突然停止 然后再次开始 例外情况是 InvalidOperationExcepti
  • 为类型列表创建别名并将其作为模板参数传递

    我正在使用可变参数模板来实现访问者模式 template
  • 如何在 ASP.NET MVC 中处理会话数据

    假设我想存储一个名为language id在会议中 我想我也许可以做如下的事情 public class CountryController Controller WebMethod EnableSession true AcceptVer
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 以编程方式更新 Wifi 网络

    我正在尝试创建一个程序 当某个 wifi 网络在范围内时 该程序会连接到该网络 即使已经连接到另一个 wifi 也是如此 我在用着简单Wifi https github com DigiExam simplewifi 基本上效果很好 除了在
  • Qt 多重继承和信号

    由于 QObject 我在 QT 中遇到了有关多重继承的问题 我知道很多人也有同样的问题 但我不知道该如何解决 class NavigatableItem public QObject Q OBJECT signals void desel
  • 现代编译器的 C++ 中“memset”功能的状态

    Context 不久前 我偶然发现了 Alexandrescu 在 2001 年发表的 DDJ 文章 http www ddj com cpp 184403799 http www ddj com cpp 184403799 它是关于比较将
  • 为什么 C# 中的命名空间允许循环依赖?

    在 c 中 您可以在文件 a cs 其命名空间为 MyApp A 中拥有一条语句 using MyApp B 而文件 b cs 其名称空间为 MyApp B 已经包含该语句 using MyApp A 如果类似的依赖关系存在于不同的 dll
  • 如何处理文件名中的空格

    我正在尝试迭代本地目录中的文件 foreach string name in Directory GetFileSystemEntries path FileAttrtibutes att File GetAttributes name 文
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 对 Action 方法的两个并行 ajax 请求排队,为什么?

    我正在使用 ASP NET MVC 开发一个视频网站 我希望在我的应用程序中拥有的一项功能是转码视频 但由于转码过程可能非常耗时 我想向客户端用户展示该过程的进度 因此 我的架构是使用一个控制器操作来处理整个转码过程 并将其进度写入存储在服
  • C 中的等效 plpgsql 触发器

    我有一个 PostgreSQL 9 0 服务器 并且在某些表上使用继承 因此我必须通过如下触发器模拟外键 CREATE OR REPLACE FUNCTION othertable before update trigger RETURNS
  • 如何正确处置注入的DLL线程?

    我将一个 DLL 注入到目标进程中 以在玩 MMORPG 时充当助手 当前功能将按键转换为鼠标点击 因为 MMORPG 要求用户移动鼠标才能实现某些功能 这是我所鄙视的 假设我出于某种原因想要取消注入 DLL 我该怎么做呢 这个方法干净吗
  • C# 使用 .Equals() 比较两个 double

    我使用 ReShaper 当我用 比较两个双精度值时 它建议我应该使用 Math 具有公差的 ABS 方法 看 https www jetbrains com help resharper 2016 2 CompareOfFloatsByE
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web

随机推荐

  • 002-从零搭建微服务-认证中心(二)

    写在最前 如果这个项目让你有所收获 记得 Star 关注哦 这对我是非常不错的鼓励与支持 源码地址 https gitee com csps mingyue 文档地址 https gitee com csps mingyue wikis 创
  • Shadow Build 读取不到配置文件

    问题 使用阴影构建后 无法读取配置文件 方法 阴影构建在单独目录中搜索 普通构建在项目目录搜索
  • MySQL的安装与配置

    免安装版的Mysql MySQL关是一种关系数据库管理系统 所使用的 SQL 语言是用于访问数据库的最常用的标准化语言 其特点为体积小 速度快 总体拥有成本低 尤其是开放源码这一特点 在 Web应用方面 MySQL 是最好RDBMS Rel
  • C语言文件操作详解

    C语言文件操作详解 一 文件指针和流 1 文件指针 2 流 二 文件的打开与关闭 1 fopen与fclose函数 2 文件打开方式 3 实例演示 三 文件的顺序读写 一 fgetc与fputc函数 1 fgetc总述 2 fgetc使用实
  • UE4-材质自发光

    1 创建材质 选择无光照 将贴图及控制自发光强度参数逻辑连接完成 使用staticswitchparameter 节点进行判断是否开启自发光 2 设置完成后 在场景中选择自发光物体 细节面板找到光照 Lightmass 使用静态光照的自发光
  • Python 数据处理之散点图--matplotlib

    import matplotlib pyplot as plt plt rcParams font sans serif SimHei 解决中文显示问题 x values 1 2 3 4 5 y values 3000 4000 6000
  • 华为od机试 最大价值的矿堆 Java

    题目 我们规定 0表示空地 1表示银矿 2表示金矿 矿堆表示由相邻的金矿或银矿连接形成的地图 银矿价值是1 金矿价值是2 你的目标是找出地图中最大价值的矿堆 并且输出该矿堆的价值 示例1 输入 22220 00000 00000 01111
  • SeleniumLibrary4.5.0 关键字详解(五)

    SeleniumLibrary4 5 0 关键字详解 五 库版本 4 5 0 库范围 全局 命名参数 受支持 简介 SeleniumLibrary是Robot Framework的Web测试库 本文档说明了如何使用SeleniumLibra
  • 全基因组选择-GS的技术评估

    基因组选择的流程 GS一般包括以下步骤 图1 首先建立参考群体 reference population 参考群体中每个个体都有已知的表型和基因型 通过合适的统计模型可以估计出每个SNP或不同染色体片段的效应值 然后对候选群体 candid
  • Tomcat 弱口令 && 后台getshell漏洞

    漏洞编号 VUL 2021040008 爆发时间 2018 10 10 漏洞简介 Tomcat支持在后台部署war文件 可以直接将webshell部署到web目录下 其中 欲访问后台 需要对应用户有相应权限 影响版本 Tomcat8 x T
  • vue格式化时间戳

    js var articleContent new Vue el articleContent data articles Vue filter yearMonthTime function value value为13位的时间戳 func
  • SpringCloud LoadBalancer 新一代负载均衡器

    前言 工作中使用 OpenFeign 进行跨服务调用 最近发现线上经常会遇到请求失败 java net ConnectException Connection refused connect 复制代码 通过排查我们发现不是接口超时 而是有时
  • 【hadoop——Hive的安装和配置】保姆式教学

    目录 一 Hive的安装和配置 1 Hive并不是hadoop自带的组件 因此我们需要去下载hive 此次课我们使用hive 1 2 1版本 下载地址为 2 下载完成之后 安装包默认保存在下载文件夹中 解压安装包apache hive 1
  • 【LeetCode】7. 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,

    7 整数反转 给你一个 32 位的有符号整数 x 返回将 x 中的数字部分反转后的结果 如果反转后整数超过 32 位的有符号整数的范围 2 31 2 31 1 就返回 0 假设环境不允许存储 64 位整数 有符号或无符号 示例 1 输入 x
  • HTML5_京东首页样式

    通用样式 去掉边框 里面的东西不会乱 页头 头部样式 header background f7f7f7 header gt header inner height 32px header gt header inner gt lf line
  • 架构师学习--组件化开发之APT使用及JavaPoet

    一 概念及作用 什么是APT 全称是Annotation Processing Tool 翻译过来就是注解处理工具 它的作用就是可以在代码编译期间对注解进行处理 并且生成Java文件 减少手动的代码输入 因此它能够使我们编写的代码更加优雅
  • IOday1

    附加题 带注册功能的账号密码输入 include
  • 记一次生产请求耗时的问题

    最近发现lb上记录的request time比upstream response time大的比较多 例如upstream response time记录是0 062 request time记录的就是5 064等等 整个耗时很反常 而且出
  • libgdx 环境搭建

    libgdx 环境搭建 分类 Android 2012 12 13 23 40 13994人阅读 评论 0 收藏 举报 一 开发包下载 1 libgdx 开发包下载 google code 最新 libgdx 0 9 7 zip 2012
  • Unity UI或3d模型的动画控制(Animation类)

    文章目录 Animation动画控制类 一 动画设置 二 模型的动作选择 三 关键方法 四 实践展示 五 控制模型移动 Animation动画控制类 在Unity中 我们可以使用2D的Spine动画来制作核心战斗模块 当然也能用3D模型来制