Unity Animancer插件(一)基本使用

这篇具有很好参考价值的文章主要介绍了Unity Animancer插件(一)基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Animancer是什么?资源商店主页

一、快速播放

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

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

public AnimancerComponent animancer;
public AnimationClip clip;

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

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

接下来为角色添加AnimatorAnimancer Component和刚刚编写的PlayAnimationOnEnable,并为字段赋值
animancer,# 动画系统,unity,动画,游戏引擎

接下来运行游戏就可以看到效果了
animancer,# 动画系统,unity,动画,游戏引擎

此时角色身上的Animancer Component组件可以看到当前动画的各项参数
animancer,# 动画系统,unity,动画,游戏引擎

二、基础移动

下面我们来实现通过按键控制角色在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);  
}

给对应字段赋值后,启动游戏看下效果
animancer,# 动画系统,unity,动画,游戏引擎

三、基础动作

下面来实现一个开枪效果。在默认状态下,角色处于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,# 动画系统,unity,动画,游戏引擎

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

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

看下效果
animancer,# 动画系统,unity,动画,游戏引擎

四、过渡

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

添加过渡效果非常简单,只需要在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;
	}
}

看下效果
animancer,# 动画系统,unity,动画,游戏引擎

另外,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,即可在检视面板中直观地看到和设置动画的各项过渡参数
animancer,# 动画系统,unity,动画,游戏引擎

此外,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;
	}
}

代码很简单,来看下效果
animancer,# 动画系统,unity,动画,游戏引擎

六、参考资料

[1]. https://kybernetik.com.au/animancer/docs/文章来源地址https://www.toymoban.com/news/detail-787569.html

到了这里,关于Unity Animancer插件(一)基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用Unity作MMD动画|插件使用|MegicaCloth2使用

      准备模型和所想要制作的动作和镜头音乐(注意版权,使用资源时请尊重原作者),导入要用到的插件MMD4Mecanim(UnityMMD模型格式转换与生成),MagicaCloth2(布料模拟,用于头发和衣服物理,只是想做的更加好看,MMD4Mecanim也有自己的物理系统,可以选择使用),MMD4UnityToo

    2024年01月19日
    浏览(34)
  • [Unity 3d] 插件---- DoTween 动画方法调用及执

    一、移动和旋转(一到四主要应用于Transform的方法) 1、使用DoTween首先要引用命名空间 Using DG.Tweening; 2、transform.DOMove(目标位置,所花费的时间/s) //移动方法 3、transform.DoLocalMoveX(目标位置,所花费的时间)//单一的移动方法 4、transform.DoLocalMove()//移动自己的局部坐标 5、transfo

    2024年02月09日
    浏览(52)
  • Unity Fungus插件的对话系统简单使用

    Fungus是Unity免费的一款开源的插件,它可以无代码的实现玩家与NPC之间的对话,对于Fungus这个插件,我今天说一说我对它的看法以及一些简单的运用和简单的代码功能的实现。 这里需要导入Fungus插件,插件导完之后会出现Tools/Fungus   SayDialog模板使用,Menu菜单选项,Character玩

    2024年02月09日
    浏览(43)
  • Unity创建人物基本动画(基础组件等相关知识和Idle的创建)

    步骤一:创建人物模型 首先,我们需要创建一个人物模型。可以使用Unity自带的模型,也可以使用第三方模型。在本文中,我们将使用Unity中自带的模型。 步骤二:创建动画控制器 在创建动画之前,我们需要先创建一个动画控制器(Animator Controller)。动画控制器是一个用于

    2024年02月15日
    浏览(48)
  • 新手向 使用C#自带方法制作unity存档系统(无插件)

    纯原创,自制 本人还是个在校的高中生,能力不精如果有漏洞欢迎指出 先放出我们示范项目的样子 演示项目工程文件下载 后面会在B站发详细的视频教程(所以文章之后肯会改) 嫌麻烦的直接复制到项目里就可以用哦 (全部的SaveSystem源码最后放出方便大家复制) 可以存储

    2024年02月10日
    浏览(52)
  • Unity游戏开发之游戏动画(Unity动画系统)

    Unity动画系统分为 动画片段 Animation Clip: 动画资源,与模型无关 动画状态机 Animator Controller:帮助我们跟踪当前动画的播放状态,并且根据设置觉得如何切换动画片段 动画组件 Animator Component:玩家角色需要播放动画功能时,需要动画组件,将游戏对象需要的动画状态机(以

    2024年02月13日
    浏览(54)
  • 23. Unity - 3D游戏开发小计02 --- 动画结束UI、导航网格代理、场景搭建插件(ProGrids,ProBuilder,Polybrush)

    1. 动画结束UI 一个游戏在通过后,都是需要一个界面显示当前游戏已经结束,即需要给游戏添加一个结束的界面,可以做一个简单的游戏结束界面,用一个图片展示: 首先在 层级窗口 添加两层UI中的Image,其中第一层的Image仅作背景,可将其填充颜色设置为纯黑色,第二层的

    2024年02月05日
    浏览(52)
  • Unity Dotween插件的运动曲线(Ease)介绍Ease选项Ease效果示例以及C#修改动画曲线功能

    我们在制作动画时经常使用这个Dotween插件,在移动、旋转、透明度等等参数的控制都可以使用该插件,而且在这个插件上的控制动画可以设置曲线,内置的曲线有这些: 以InOutSine的曲线进行往右移动: 效果是这样的: 能看出开始是从0提速,最后是慢慢减速至0的效果。 4个

    2024年02月01日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包