考慮到每個人基礎可能不一樣,且并不是所有人都有同時做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,如果學習過程中遇到任何問題,也歡迎你評論私信找我。
贈人玫瑰,手有余香!如果文章內容對你有所幫助,請不要吝嗇你的點贊評論和關注
,你的每一次支持
都是我不斷創作的最大動力。當然如果你發現了文章中存在錯誤
或者有更好的解決方法
,也歡迎評論私信告訴我哦!