Unity类噩梦城 学习笔记2

Part2:animator转换(P29)

1:效果图
(1)给player创建子物体,用于存放动画和图形渲染

在这里插入图片描述
在这里插入图片描述

(2)给Player->Animator添加动画playeridle和playermove

在这里插入图片描述

(3)编辑动画器,添加新bool参数ide和move,用于作为动画切换

在这里插入图片描述

(4)设置跳转条件,将playeridle设置为默认动画,当触发Move则转化为playermove动画!

在这里插入图片描述

2:代码改变
//Player.cs添加代码
public Animator anim { get; private set; }//这样才能配合着拿到自己身上的animator的控制权
private void Awake()
    {
        stateMachine = new PlayerStateMachine();
        //通过构造函数,在构造时传递信息
        idleState = new PlayerIdleState(this, stateMachine, "Idle");
        moveState = new PlayerMoveState(this, stateMachine, "Move");
        //this 就是 Player这个类本身
    }
private void Start()
    {
        anim = GetComponentInChildren<Animator>();//拿到自己身上的animator的控制权
        stateMachine.Initialize(idleState);
    }
private void Update()//在mano中update会自动刷新但其他没有mano的不会故,需要在这个updata中调用其他脚本中的函数stateMachine.currentState.update以实现 //stateMachine中的update
 
    {
        stateMachine.currentState.Update();//反复调用CurrentState的Update函数
    }
//PlayerState.cs添加代码 
public virtual void Enter()
    {
        player.anim.SetBool(animBoolName, true);//通过animator自带的函数,将animator里的Bool值改变为想要的值
    }
public virtual void Exit()
    {
        player.anim.SetBool(animBoolName, false);//通过animator自带的函数,将animator里的Bool值改变为想要的值
    }
//PlayerIdleState.cs添加代码(PlayerIdleState.cs同理)

public class PlayerIdleState : PlayerState//继承函数,获得PlayerState里的所有函数和参数
{
    public PlayerIdleState(Player _player, PlayerStateMachine _stateMachine, string _animBoolName) : base(_player, _stateMachine, _animBoolName)
    {
    }//构造函数,用于传递信息。
public override void Update()
    {
        base.Update();
        if(Input.GetKeyDown(KeyCode.N))
        {
            stateMachine.ChangeState(player.moveState);
        }
    }}
3.图示

请添加图片描述

本次操作为若按下n键则进行在idle和move状态切换,若触发n(设当前为idle),则进行stateMachine.ChangeState(player.moveState);则进行exit,cuurentstate重新赋值,再进行enter进入move状态,从而使得idle动画暂停,move动画开始播放
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值