Unity+PICO实训—人物在移动时跟随的宠物播放动画

项目描述:

在很多游戏场景中我们都会发现:当玩家进行移动时,玩家的宠物也会跟着进行移动。此时我们会发现如果宠物是一直播放行走的动画,那就有点不合理。只有玩家移动时,宠物跟着移动并播放移动的动画,玩家停止移动时,宠物的动画也停止播放。

技术难点:

1.怎样获取摇杆数值,并使玩家玩家基于摇杆发生移动。(请查看小编写的摇杆数值获取的文章)

2.宠物的动画怎样才能够按照玩家的是否移动来判断动画的是否播放,而不是播放完整个动画在进行停止。

一:Animator(动画控制器)

Unity的版本更新后就淘汰掉了旧的动画系统,采用了新的动画系统,及基于 Animator(动画控制器)进行动画的播放与暂停。

创建Animator(动画控制器),挑选好需要使用的Animation(动画),为宠物搭建好动画控制逻辑。如下图所示:

Camel_walk_slow:宠物需要播放的动画。

二:代码

搭建好了动画控制器,下面就是代码部分的编写:

1.调用XR
using UnityEngine.XR.Interaction.Toolkit;
2.  声明变量
public ActionBasedController _RightController;
public Animator Camel;
private Vector3 _Position;

获取手柄控制器:ActionBasedController

获取动画控制器:Animator

声明三维向量,储存玩家的位置信息。

3.逻辑控制

先在Start方法中将初始位置赋值给三维向量。

void Start()
{
    _Position = transform.position;
}

在Update方法中进行编写,此方法是unity的自带方法,为每帧都会进行调用。

var _Vector2 = _RightController.translateAnchorAction.action.ReadValue<Vector2>();
var _Vector3 = new Vector3(_Vector2.x, 0, _Vector2.y);
transform.Translate(_Vector3 * Time.deltaTime);
if (transform.position != _Position)
{
    Debug.Log("我移动了");
    Camel.Play("Camel_walk_slow");
    Camel.speed = 1;
    _Position = transform.position;      
}
else
{
    Camel.speed = 0;
}

将获取的手柄数值转换为二维向量,在转换为三维向量,并通过transform的Translate方法实现移动。

判断位置是否发生改变:

将玩家的位置和赋值过的三位向量进行比较,若是不相等则代表,位置发生了改变,则执行宠物进行移动的代码(Camel.Play("Camel_walk_slow");),并将移动的位置实施赋值给定义的三维向量。

在移动的时候宠物动画速度正常进行(Camel.speed = 1;)

在停止移动时将宠物动画的播放速度变成0,及时停止动画的运行(Camel.speed = 0;)

三:绑定

注意!!!!

脚本编辑好之后,需要将脚本挂载玩家的上面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值