【零基础入门unity游戏开发——动画篇】unity旧动画系统Animation组件的使用

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇

  • 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的同学入门。
  • 【unity通用篇】:主要讲解unity的基础通用的知识,包括unity界面、unity脚本、unity资源管理、unity动画、unity摄像机等,适合unity初学者入门。
  • 【unity3D篇】:主要讲解unity3D的知识,unity3D角色、unity3D物理系统、unity3D光照等,适合只想做2D游戏的开发者学习。
  • 【unity2D篇】unity2D篇:主要讲解unity2D的知识,包括unity2D角色、unity2D物理系统、unity2D光照等,适合只想做3D游戏的开发者学习。

这样方便大家按需选择性的去学习,比如有编程基础的大概率可以直接从unity通用篇开始入门,没有编程基础的建议从C#篇开始学习。只想做2D游戏的话,可以直接从unity2D篇开始学习,3D篇大概率就不需要看了,节约学习时间成本。

前言

1、什么是老动画系统?

Unity中有两套动画系统:

Legacy Animation System(老系统) Mecanim Animation System(新系统)
组件类型 Animation组件 Animator组件
动画控制方式 线性动画片段直接播放 状态机驱动动画逻辑
版本支持 Unity 4及更早版本原生支持 Unity 4开始引入(当前主流)
动画资源格式 .anim 动画片段 支持.anim与更复杂的动画控制器.controller
骨骼系统 基础骨骼支持 完善的人形动画重定向系统

值得注意的是,随着unity更新老动画系统已经逐渐被淘汰了,目前可能主要用于处理老版本项目和简单的一些自制动画。新项目已经不建议大家使用了,所以这部分内容大家作为了解就行。

2、老动画系统控制动画播放

注意
在创建动画之前为对象添加Animation组件之后再制作动画。
这时制作出的动画和之前的动画格式是有区别的。

老动画系统创建Animation前要给生成动画的对象添加Animation脚本,挂载过后Unity就会认为这个对象要使用老动画系统。
在这里插入图片描述

挂载过会按老套路在Animation窗口新建Animation动画,选择文件夹存储。
在这里插入图片描述
因为对象添加了Animation组件,创建后Unity不会自动创建Animator文件并且给对象添加Animator组件。只会把新创建的Animation文件和Animation组件关联。Animation窗口上的操作和之前一模一样。
在这里插入图片描述
要注意老版本创建出来的Animation文件上的参数和新版本是不同的。

一、老Animation组件参数

在这里插入图片描述

介绍
Animation动画 默认播放的动画。
Animations 该动画组件可以控制的所有动画,对对象新创建老版本的Animation后会自动添加关联到这里。
Play Automatically 是否一开始就自动播放默认动画。
Animate physics 动画是否与物理交互。
Animate physics 是否用物理方式驱动动画
Culling type 决定什么时候不播放动画;Always Animate:始终播放。Based On Renderers:基于渲染的方式执行,动画离开屏幕了就不再执行,节省性能

二、老Animation文件参数

在这里插入图片描述

扫描二维码关注公众号,回复: 17540622 查看本文章
  • Default:读取设置得更高的默认重复模式。
  • Once:播放一次就停止。
  • Loop:从头到尾不停循环播放。
  • ClampForever:播放结束会停在最后一帧,并且会一直播放最后一帧(相当于状态不停止),表现效果和Once一样,但是逻辑处理上不同。
  • PingPong:从头到尾从尾到头不停播放。

三、老Animation动画系统代码控制

1、得到Animation组件

要把脚本挂载到对象上,用脚本得到Animation组件

private Animation animation;

void Start()
{
    
    
    animation = this.GetComponent<Animation>();
}

2、播放动画

Animation.Play方法

//Animation的Play方法 播放动画
//播放没有混合的动画。
//会直接生硬的切换动画 假如播放到一半切换动画 回强行停止第一个播放的动画 切换到第二个播放动画的初始状态 进行播放
if (Input.GetKeyDown(KeyCode.Alpha1))
{
    
    
    animation.Play("1");
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
    
    
    animation.Play("2");
}

3、淡入播放,自动产生过渡效果

Animation.CrossFade方法

//Animation的CrossFade方法 淡入播放,自动产生过渡效果
//在后续 time 秒的时间段内,使名称为 animation 的动画淡入,使其他动画淡出。
//会先淡出把状态慢慢变成要播放的动画的初始在状态,再播动画
if (Input.GetKeyDown(KeyCode.Alpha3))
{
    
    
    //当你要播放的动画的开始状态 和当前的状态 不一样时 
    //就会产生过渡效果
    animation.CrossFade("3");
    //animation.Play("3");
}

4、前一个播完直接再播放下一个

Animation.PlayQueued方法

//Animation的PlayQueued方法 前一个播完直接再播放下一个
//在先前的动画播放完毕后再播放动画。
//可以理解为把动画加到队列中 等上一个动画播放完再播 会生硬的切换初始状态
if (Input.GetKeyDown(KeyCode.Alpha4))
{
    
    
    animation.PlayQueued("2");
}

5、前一个播完淡入播放下一个

Animation.CrossFadeQueued方法

//Animation的CrossFadeQueued方法 前一个播完淡入播放下一个
//使动画在上一个动画播放完成后交叉淡入淡出。
//可以理解为把动画加到队列中 等上一个动画播放完再播 会先淡出把状态慢慢变成要播放的动画的初始在状态,再播动画
if ( Input.GetKeyDown(KeyCode.Alpha5) )
{
    
    
    animation.CrossFadeQueued("2");
}

6、停止播放所有动画

Animation.Stop方法

//Animation的Stop方法 停止播放所有动画
//停止所有使用该动画启动的正在播放的动画。
//animation.Stop();

7、是否在播放某个动画

Animation.IsPlaying方法

//Animation的IsPlaying方法 是否在播放某个动画
//名称为 name 的动画是否正在播放?
if ( animation.IsPlaying("1") )
{
    
    

}

8、播放模式设置

Animation.wrapMode变量

//Animation的wrapMode变量 播放模式设置
//应如何处理超出此剪辑播放范围的时间?
//可以进去看枚举
//animation.wrapMode = WrapMode.Loop;//设置成循环播放

9、其它

层级和权重以及混合(老动画系统需要通过代码来达到动画的遮罩、融合等效果)

//设置层级
animation["1"].layer = 1;
//设置权重
animation["1"].weight = 1;
//混合模式 叠加还是混合
animation["1"].blendMode = AnimationBlendMode.Additive;
//设置混组相关骨骼信息
animation[""].AddMixingTransform();

四、实战

修改动画为循环,并拖入绑定动画
在这里插入图片描述
通过代码方式播放动画
在这里插入图片描述

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Animation : MonoBehaviour
{
    
    
    void Start()
    {
    
    
        
    }

    void Update()
    {
    
    
    	//点击鼠标左键开始播放动画
        if (Input.GetMouseButtonDown(0))
        {
    
    
        	//播放为right的动画片段
            GetComponent<Animation>().Play("right");
        }
    }
}


专栏推荐

地址
【零基础入门unity游戏开发——C#篇】
【零基础入门unity游戏开发——unity通用篇】
【零基础入门unity游戏开发——unity3D篇】
【零基础入门unity游戏开发——unity2D篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36303853/article/details/147003879
今日推荐