Unity Animancer插件基本使用

Posted 夜槿笙歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/

Unity Rain Ai 插件基本使用

1.下载安装Rain 插件

原先可以在unity的Asset Stroe 下载到,但是现在Rain 的开发公司因为人工智能的发展,公司得到投资,所以下架了rain插件。

所以我给出网盘链接

链接:https://share.weiyun.com/5BKFvOn 密码:wsikw8

链接失效请联系我。

2.向指定目标移动

导入后可以看到在顶部已经有了RAIN技术分享图片

创建一个地板和一个Ai对象如图:

技术分享图片

 

 选择要操作的Ai对象,创建AI子物体

 

 技术分享图片

我们可以看到AI自物件上有这么一个组件

技术分享图片

参数如下:

AI:当前这个rain 控制器的名字

Body:所控制的物体

Mind:思考方式(免费版只有BasicMind)

Behavior Tree :使用的行为树

Open Behavior Editor:打开行为树编辑窗口

 

3.让物体到达我们指定的点

我们打开行为树编辑窗口

技术分享图片

Behavior Tree :当前的行为树

 

我们先创建一棵行为树(点击框,选create),给行为树一个名字(注意不能输入中文)

技术分享图片

 rain会为我们创建1个root默认节点(默认是SEQ[依次执行其子节点]),不懂的请自己查询行为树节点类型

技术分享图片

创建一个move的子节点

技术分享图片

我们发现我们缺少一个移动target

如图创建一个导航目标

修改导航目标名称为tar1

技术分享图片

 我们可以点击这个按钮使tar1沉降到plan上

技术分享图片

 

在行为树上设置目标(注意:一定要+"")

技术分享图片

face target 就是面向的方向

为AI物件指定使用的行为树

技术分享图片

点击运行,我们看到缓缓移动到目标点,且下面行为树,颜色从运行中(黄色)到运行成功(绿色)

技术分享图片

3.沿着指定路径移动

如图创建route 路径

技术分享图片

在创建的route对象上 点击增加新路点,并将Waypoint Route对象改名为Route

技术分享图片

创建如图所示的行为树

技术分享图片

 

注意我框住的2个内容,i表示迭代变量(当前路点)

在move节点中设置对应的目标

技术分享图片

技术分享图片

因为我设置的是pingpong运动所以会来回往复。

4.智能规避障碍物

我们在中间放一个障碍物我们发现它直接穿透了,这不是我们想要的效果。

技术分享图片

创建一个导航网格,使其能包住我们需要运算的场景。

技术分享图片

点击生成网格

技术分享图片

运行后发现已经比较完美的绕开障碍物了。

 技术分享图片

 

 

希望这个教程对您有所帮助,谢谢!

以上是关于Unity Animancer插件基本使用的主要内容,如果未能解决你的问题,请参考以下文章

Unity安装配置Python使用protobuf转换Excel表格数据并在unit中使用

Unity安装配置Python使用protobuf转换Excel表格数据并在unit中使用

Unity热门插件推荐

Unity插件FogofWar详细学习笔记

Unity WebView 插件⭐️3D WebView 插件 基本介绍

Unity Rain Ai 插件基本使用