Unity Animancer插件(一)基本使用

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/

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Unity Deform是一个Unity引擎的插件,用于在游戏中实现角色或物体的形变效果。通过使用Unity Deform,开发者可以很容易地实现人物的肌肉、衣服的流动以及物体的形状变化等效果。 使用Unity Deform插件的第一步是将其导入到Unity项目中。将插件文件夹拖放到Unity Assets文件夹下,然后在Unity编辑器中刷新资源,即可在工程中看到插件的相关文件。 接下来,我们可以在Unity的场景视图中选择要应用形变效果的物体或角色。然后,通过在Inspector窗口中找到Unity Deform插件的组件来添加形变效果。该组件包括一系列参数,可以用来调整形变效果的强度、速度和范围等。 在Unity Deform插件中,有多种形变效果可以选择。例如,通过使用Skinned Deformer组件,我们可以实现角色的肌肉或脂肪的形变效果。同样地,使用Cloth Deformer组件,我们可以为角色的衣服或物体添加流动的效果。此外,还有其他形变效果,如Mesh Deformer、Bone Deformer等可以根据需求选择使用。 不仅如此,Unity Deform插件还提供了编辑器扩展工具,用于更方便地编辑和调整形变效果。通过调整编辑器中的曲线、控制点等参数,可以实时预览形变效果,并对其进行微调。 总之,Unity Deform插件是一个强大的工具,可以让开发者在Unity游戏中轻松实现形变效果。通过简单的导入和设置,我们可以为角色或物体添加各种形状变化,从而丰富游戏的视觉效果,提升游戏的沉浸感。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值