Unity Animancer插件(一)基本使用

news2024/11/24 22:52:42

Animancer是什么?资源商店主页

一、快速播放

我们来通过Animancer实现一个最基本的动画播放效果。

首先创建一个脚本PlayAnimationOnEnable,编写如下代码

public AnimancerComponent animancer;
public AnimationClip clip;

private void OnEnable()
{
	animancer.Play(clip);
}

很容易理解,就是在OnEnable()时播放一个指定的动画片段。

接下来为角色添加AnimatorAnimancer Component和刚刚编写的PlayAnimationOnEnable,并为字段赋值

接下来运行游戏就可以看到效果了

此时角色身上的Animancer Component组件可以看到当前动画的各项参数

二、基础移动

下面我们来实现通过按键控制角色在IdleWalk之间转换。

新创建一个脚本BaseMovement。在代码中监听Y轴上的输入。然后根据监听到的数值判断角色状态,并播放相应的动画

public AnimancerComponent animancer;  
public AnimationClip idle;  
public AnimationClip walk;  
  
private void Update()  
{  
    float y = Input.GetAxis("Vertical");  
    animancer.Play(y > 0.1f ? walk : idle);  
}

给对应字段赋值后,启动游戏看下效果

三、基础动作

下面来实现一个开枪效果。在默认状态下,角色处于Idle状态,当点击鼠标左键时,角色进入射击状态,射击完成后再返回Idle状态。

首先创建一个脚本BasicAction,编写如下代码。这里通过动画播放完成后的回调事件,使角色返回Idle状态

public AnimancerComponent animancer;
public AnimationClip idle;
public AnimationClip shoot;

private void OnEnable()
{
	animancer.Play(idle);
}

private void Update()
{
	if (Input.GetMouseButtonDown(0))
	{
		var state = animancer.Play(shoot);
		state.Events.OnEnd = OnEnable;
	}
}

看下效果

此时我们必须等待射击动画播放完成才能再次射击,这是因为Animancer在动画播放过程中并不会重新执行Play()。解决方法也很简单,只需要在Play()执行后将状态的Time设置为0即可

// ...
private void Update()
{
	if (Input.GetMouseButtonDown(0))
	{
		var state = animancer.Play(shoot);
		state.Time = 0;
		state.Events.OnEnd = OnEnable;
	}
}

看下效果

四、过渡

前面的射击动画由于不存在过渡,看起来很生硬,所以接下来我们给动画添加上过渡效果。

添加过渡效果非常简单,只需要在Play()方法中添加一个过渡时间的参数(Lite版只允许设置为0.25)

public AnimancerComponent animancer;  
public AnimationClip idle;  
public AnimationClip shoot;

private void OnEnable()
{
	animancer.Play(idle,0.25f);
}

private void Update()
{
	if (Input.GetMouseButtonDown(0))
	{
		var state = animancer.Play(shoot,0.25f);
		state.Time = 0;
		state.Events.OnEnd = OnEnable;
	}
}

看下效果

另外,Play()方法还可以设置第三个参数,用来指定淡入淡出的模式。将其设置为FadeMode.FromStart可以使动画始终从开始淡入。这样一来也就不需要设置Time为0了。

// ...
private void Update()
{
	if (Input.GetMouseButtonDown(0))
	{
		var state = animancer.Play(shoot,0.25f,FadeMode.FromStart);
		state.Events.OnEnd = OnEnable;
	}
}

在前面的示例中,我们使用的都是AnimationClip接收动画剪辑。但这种方式对于过渡时的各项参数不够直观。Animancer为我们封装了一个更加实用的类型ClipTransition。我们只需要将脚本中的AnimationClip换成ClipTransition,即可在检视面板中直观地看到和设置动画的各项过渡参数

此外,ClipTransition还可以允许我们对单个的动画剪辑设置触发事件

public AnimancerComponent animancer;  
public ClipTransition idle;  
public ClipTransition shoot;

private void OnEnable()
{
	// 直接在动画剪辑上绑定事件
	shoot.Events.OnEnd = OnShootEnd;
	animancer.Play(idle);
}

private void OnShootEnd()
{
	animancer.Play(idle);
}

private void Update()
{
	if (Input.GetMouseButtonDown(0))
	{
		animancer.Play(shoot);
	}
}

五、综合应用

下面通过一个案例来对前面的内容进行串联。我们需要通过一个有限状态机来控制角色在行走、待机、射击状态之间切换。创建一个脚本BasicCharacter并编写如下代码

public AnimancerComponent animancer;
public ClipTransition idle;
public ClipTransition shoot;
public ClipTransition walk;

/// <summary>
/// 角色状态
/// </summary>
private enum PlayerState
{
	Move,
	Shoot
}

private PlayerState _curState;

private void OnEnable()
{
	_curState = PlayerState.Move;
	shoot.Events.OnEnd = OnShootEnd;
}

/// <summary>
/// 射击结束回调
/// </summary>
private void OnShootEnd()
{
	_curState = PlayerState.Move;
}
/// <summary>
/// 移动
/// </summary>
private void Move()
{
	_curState = PlayerState.Move;
	float y = Input.GetAxis("Vertical");
	animancer.Play(y > 0.1f ? walk : idle);
}
/// <summary>
/// 射击
/// </summary>
private void Shoot()
{
	if (Input.GetMouseButtonDown(0))
	{
		_curState = PlayerState.Shoot;
		animancer.Play(shoot);
	}
}

private void Update()
{
	switch (_curState)
	{
		case PlayerState.Move:
			Move();
			Shoot();
			break;
		case PlayerState.Shoot:
			Shoot();
			break;
	}
}

代码很简单,来看下效果

六、参考资料

[1]. https://kybernetik.com.au/animancer/docs/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pinia 持久化存储

pinia刷新数据持久化解决方案 无论是使用vuex 还是pinia都会面临一个问题&#xff1a;页面刷新&#xff0c;状态数据丢失的问题&#xff1b; 为了解决数据状态持久化问题&#xff0c;可以考虑使用插件 pinia-plugin-persistedstate 目录 安装pinia 并引入使用 npm install pin…

CCES软件如何来对ADI的SHARC DSP进行Flash的编程和烧写

如何做 Flash 烧写并实现脱机运行&#xff0c;其实我在之前的文章里有讲过&#xff0c;就可以用 Visual DSP来做&#xff0c;鼠标 点几下&#xff0c;非常简单。但是很多客户用的是 21569、21565这一类的SHARC DSP&#xff0c;不能再用 VDSP 来做烧写了&#xff0c;所以我想了 …

留学Essay写作怎么积累更多词汇量?

大部分留学生们都会感觉Essay挺难写作的&#xff0c;然而这其实是自身平时积累的不够多。当然&#xff0c;还有其他的正确方法&#xff01;高分的Essay都是平时练习出来的&#xff0c;所以我们需要在平时多注意收集一些相关的写作知识。下面是一些常用的Essay写作词汇&#xff…

5 年经验年薪百万,一位阿里 P8 分享自己的成长干货

今天这篇文章&#xff0c;我前后读了 3 遍&#xff0c;主人公是阿里最年轻的 P8 之一&#xff0c;工作五年连升三级&#xff0c;他在一次采访中分享了自己的成长经历和职场心得&#xff0c;非常接地气&#xff0c;我们整理了 一下&#xff0c;真诚地推荐给每一个渴望成长和进步…

基于主成分分析的支持向量机入侵检测系统

基于主成分分析的支持向量机入侵检测系统学习目标&#xff1a;学习内容&#xff1a;A. 数据集分析B. 主成分分析 (PCA)--降维C. 支持向量机 (SVM)核函数数据集预处理--转换数据集预处理 --特征缩放算法过程核函数对比总结不足参考论文申明&#xff1a; 未经许可&#xff0c;禁止…

ESB产品Oracle数据库升级说明

ESB企业服务总线平台作为支撑企业综合集成的产品&#xff0c;在应用集成、数据集成、数据治理等解决方案都发挥着非常重要的作用。随着产品和解决方案的不断优化和升级&#xff0c;ESB企业服务总线平台功能需要逐步进行完善&#xff0c;不断提升产品功能的完备性、易用性和全面…

Github最新霸榜,Alibaba架构师手写的分布式系统核心原理手册

前言&#xff1a; 分布式的重要性就不需要我再强调了吧&#xff0c;它现在已经是大厂面试的“常驻嘉宾”了 前几天有粉丝在后台跟我吐槽&#xff1a;鑫哥&#xff0c;我觉得现在的风气真的变了&#xff0c;之前只觉得网上的情况是个例&#xff0c;结果自己就遇到了很多次&…

东方甄选、交个朋友迎头而上,云集不进则退

配图来自Canva可画 社交电商、会员电商、精选电商&#xff0c;多个定位描绘出云集的“求变史”。 2015年前后&#xff0c;社交电商概念崛起&#xff0c;拼多多靠“砍一刀”、“拼团”快速成长&#xff0c;云集也学着借助社交平台微信的传播途径&#xff0c;通过社交互动、用户…

【论文笔记】DEEP FEATURE SELECTION-AND-FUSION FOR RGB-D SEMANTIC SEGMENTATION

论文 题目&#xff1a;DEEP FEATURE SELECTION-AND-FUSION FOR RGB-D SEMANTIC SEGMENTATION 收录于&#xff1a;ICME 2021 论文&#xff1a;Deep Feature Selection-And-Fusion for RGB-D Semantic Segmentation | IEEE Conference Publication | IEEE Xplore [2105.04102]…

[附源码]Python计算机毕业设计Django学生宿舍维修管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

仿QQ音乐(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[安装] Doris集群搭建环境

参考文献 参考链接 推荐指数 Doris集群安装部署&#xff08;详细&#xff09; [火][火][火][火][火] Doris学习笔记之数据表的创建 [火][火][火] doris官网0.15版本的安装部署 [火][火][火][火][火] Doris0.15升级到1.1.1 [火][火][火][火][火] [说明] Doris使用…

7个有用的Pandas显示选项

Pandas是一个在数据科学中常用的功能强大的Python库。它可以从各种来源加载和操作数据集。当使用Pandas时&#xff0c;默认选项就已经适合大多数人了。但是在某些情况下&#xff0c;我们可能希望更改所显示内容的格式。所以就需要使用Pandas的一些定制功能来帮助我们自定义内容…

Word控件Spire.Doc 【图像形状】教程(13): 如何在C#中对齐word文档上的形状

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

poi-tl实现对Word模板中复杂表格的数据填充

文章目录前言what poi-tlwhy poi-tlHow poi-tl1. 版本问题2. 集成和使用3. SpringEL表达式总结前言 开发时, 我们有时需要进行word类型表格导出, 而对于表格操作. 我们一般可能会倾向于使用 poi 进行操作. 但poi操作比较复杂, 所以就在寻找一种可以快速将内容填充到表格中的工具…

yolov7配置与训练记录(二)

yolov7配置与训练记录(一) 已经完成了环境的配置,下面开始文件内部的操作 yolov7官方下载地址为 git clone https://github.com/WongKinYiu/yolov71 将下载好的预训练权重放在yolov7-main/weights内 需要在yolov7中新建weights文件夹(也是为了方便管理权重文件) 测试 pyth…

单调队列算法总结

背景 单调队列&#xff0c;即为单调递减或者单调递增的队列。队列中的元素只能在队尾入队、从队首或者队尾出队。 单调队列的基本实现就是维护一个双向队列&#xff0c;只有当一个元素是当前最值、或者可能成为最值时才保留&#xff0c;否则出队。 单调队列通常用来解决在滑…

NR 大规模天线设计--1

参考《无线系统设计与国际标准》 概述 空间自由度是多天线系统获得性能增益的源泉。随着有源天线技术理论的出现&#xff0c; 为MIMO维度的扩展奠定了理论基础&#xff0c;有源天线技术在商用移动通讯领域的发展&#xff0c; 对天线的进一步扩展&#xff0c;尤其对信道垂直维…

Java常用API

Java常用API什么是API&#xff1f;Object类的作用:Object类的常用方法&#xff1a;Object的toString方法&#xff1a;Obiect的equals方法ObiectsStringBuilderMathSystem类概述BigDecimal什么是API&#xff1f; 1.API应用程序编程接口。 2.简单来说&#xff1a;就是Java帮我们…

JAVA中变量与常量

文章目录0 写在前面1 变量1.1 声明变量1.2 变量初始化2 常量3 写在最后0 写在前面 所有程序设计语言一样&#xff0c;Java 也使用变量来存储值。常量就是值不变的变量。 1 变量 1.1 声明变量 格式 类型 变量名; 例如&#xff1a; int index; double salary; long earthPop…