考虑到每个人基础可能不一样,且并不是所有人都有同时做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文件参数
- 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,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!