笔记22 如何制作动画

玩家行走动画

创建地面、了解骨骼

在这里插入图片描述

动画控制器

在这里插入图片描述

添加参数(有4 种类型)

在这里插入图片描述

添加刚体(为了使触发有效)、碰撞器

在这里插入图片描述

代码:PlayerControl

 public class PlayerControl : MonoBehaviour {

    //首先拿到动画播放组件
    private Animator ani;

	void Start () {
        //首先拿到动画播放组件
        ani = GetComponent<Animator>();
    }

    void Update () {
        //为了让它动起来,需要获取输入轴
        float vertical = Input.GetAxis("Vertical");
        float hotizontal = Input.GetAxis("Horizontal");
        Vector3 dir = new Vector3(hotizontal, 0, vertical);
        //如果向量不等于000,说明我们按了一个键
        if(dir != Vector3.zero)
        {
            //先旋转到这个方向
            transform.rotation = Quaternion.LookRotation(dir);
            //然后前进。每秒走两米
            transform.Translate(Vector3.forward * 2 * Time.deltaTime);
            //行走动画
            ani.SetBool("Walk", true);
        }
        else
        {
            ani.SetBool("Walk", false);
        }
	}
}

门的动画(旧版动画)

触发器;添加Animation组件后,得以创建旧版动画。

在这里插入图片描述

帧动画、录制动画

在这里插入图片描述

代码:Door

public class Door : MonoBehaviour {
    //得到组件
    private Animation ani;

	void Start () {
        //去我的子物体里面找
        ani = GetComponentInChildren<Animation>();
	}
	
	// Update is called once per frame
	void Update () {
		
	}

    //有人进到触发了
    private void OnTriggerEnter(Collider other)
    {
        //播放开门动画
        ani.Play("DoorOpen");
    }
    //有人离开触发了
    private void OnTriggerExit(Collider other)
    {
        ani.Play("DoorClose");
    }
}

平台升降动画

制作好触发器

在这里插入图片描述

代码:CubeTest

public class CubeTest : MonoBehaviour {
    //获得它的Animation
    private Animation ani;

	void Start () {
        //获得它的Animation
        ani = GetComponent<Animation>();
    }

    //有人进到触发了
    private void OnTriggerEnter(Collider other)
    {
        //拿到动画状态
        AnimationState state = ani["Up"];
        //state里面有很多东西
        //例如名字state.name
        //例如当前动画的循环模式state.wrapMode
        //例如当前播放的时间。即当前从哪里开始播放
        state.time = 0;
        //例如播放的速度。1是正常速度。
        state.speed = 1;
        //播放
        ani.Play("Up");
        //添加动画判断。有两种,输出的都是布尔值。
        //一。isPlaying表示是否正在播放动画,是个属性。
        Debug.Log(ani.isPlaying);
        //二。IsPlaying("Up")当前是否在播放Up这个动画,这是个方法。
        Debug.Log(ani.IsPlaying("Up"));
    }
    //有人离开触发了
    private void OnTriggerExit(Collider other)
    {
        //拿到动画状态
        AnimationState state = ani["up"];
        //state.time当前播放的时间,state.length当前动画的总长度,
        //比如动画的总长度是1秒,那么它卡开始播放时间就是第1000毫秒。
        state.time = state.length;
        //将速度调为-1,表示逆向播放
        state.speed = -1;
        //播放
        ani.Play("Up");
    }
}

新动画创建,切换,过渡

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值