日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2022-05-14 Unity核心7——2D动画

發(fā)布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2022-05-14 Unity核心7——2D动画 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

        • 一、序列幀動畫
        • 二、骨骼動畫 —— 2D Animation
        • 三、反向動力學 IK
        • 四、換裝
        • 五、骨骼動畫 —— Spine

一、序列幀動畫

(一)什么是序列幀動畫

? 我們最常見的序列幀動畫就是我們看的日本動畫片,以固定時間間隔按序列切換圖片,就是序列幀動畫的本質(zhì)

? 當固定時間間隔足夠短時,我們?nèi)庋劬蜁J為圖片是連續(xù)動態(tài)的,進而形成動畫(會動的畫面)

? 它的本質(zhì)和游戲的幀率概念有點類似,原理就是在一個循環(huán)中按一定時間間隔不停的切換顯示的圖片

(二)制作序列幀動畫

? 方法一:

  • 創(chuàng)建一個空物體

  • 創(chuàng)建一個動畫

  • 直接將某一個動作的序列幀拖入窗口中

  • ? 方法二:

    ? 直接將圖片拖入 Hierarchy 層級窗口中

    ? 注意:可以修改動畫幀率,來控制動畫的播放速度

    二、骨骼動畫 —— 2D Animation

    ? 2D 骨骼動畫是利用 3D 骨骼動畫的制作原理進行制作的

    ? 將一張 2D 圖片分割成 n 個部位,為每個部位綁上骨骼,控制骨骼旋轉(zhuǎn)移動,達到用最少的 2D 美術(shù)資源做出流暢的 2D 動畫效果

    ? 在 Package Manager 窗口搜索 2D Animation 并安裝

    ? 導入工具后,在 Sprite Editor 窗口會多一個選項 Skinning Editor

    (一)單張圖片骨骼編輯

    ? 菜單欄按鈕:

  • Reset Pose:將角色谷歌和關(guān)節(jié)回復到原始位置
  • Sprite Sheet:圖集顯示(特殊圖片格式 psb 才顯示)
  • Copy:復制當前選擇的數(shù)據(jù)
  • Paste:粘貼復制數(shù)據(jù)
  • ? Bones:骨骼

  • Preview Pose:預(yù)覽模式,可以預(yù)覽動作并不會真正地改變設(shè)置

  • Edit Bone:編輯骨骼,可以改變骨骼位置、長度、方向、名稱等

  • Create Bone:創(chuàng)建骨骼,需要雙擊圖片進行選中后才能創(chuàng)建骨骼

    左鍵創(chuàng)建骨骼,默認每一個骨骼是上一個骨骼的子對象

    右鍵取消父子關(guān)系繼續(xù)創(chuàng)建骨骼

  • Split Bone:拆分骨骼,將一個骨骼一分為二

  • ? Geometry:蒙皮

    ? 蒙皮決定了骨骼主要控制哪一部分

  • Auto Geometry:自動蒙皮
    • Outline Detail:邊緣細節(jié),值越大,輪廓越細致
    • Alpha Tolerance:阿爾法公差值,控制蒙皮細節(jié)
    • Subdivide:細化程度,控制蒙皮細節(jié)
    • Weights:是否自動設(shè)置權(quán)重,一般勾選
  • Edit Geometry:編輯蒙皮
  • Create Vertex:創(chuàng)建頂點
  • Create Edge:創(chuàng)建邊線
  • Split Edge:拆分邊,用一個新的頂點分離一個邊
  • ? Weights:權(quán)重

    ? 權(quán)重決定了當骨骼運動時如何影響頂點和邊

  • Auto Weights:自動賦予權(quán)重
  • Weight Slider:編輯頂點和邊的權(quán)重
    • Mode:計算模式
      • Add And Subtract:加減法
      • Grow And Shrink:增長和搜索
      • Smooth:平滑
    • Bone:設(shè)置權(quán)重的骨骼
    • Normalize:標準化設(shè)置
    • Amount:數(shù)量級
    • Vertex Weight:頂點權(quán)重對應(yīng)的骨骼
  • Weight Brush:用筆刷賦予權(quán)重
  • Bone Influence:主要用于在 psb 圖片中使用骨骼控制點的圖片關(guān)聯(lián)
  • ? 設(shè)置完成后,將圖片拖入 Hierarchy 窗口中,為其添加 Sprite Skin 腳本,點擊 Create Bones 按鈕,將生成骨骼

    ? 之后便可以通過 Animation 為其添加動畫

    (二)圖集圖片骨骼編輯

    ? 在編輯之前,我們需要對圖片進行如下操作:

    • 設(shè)置 Sprite 為圖集模式
    • 對圖集圖片進行切片

    ? 具體對圖集中每一張圖片的骨骼操作與上述類似

    ?

    ? 在 Hierarchy 窗口中,創(chuàng)建一個根物體當作圖集的父對象,依次將每一張圖拖進根物體下。

    ? 每次拖入一張圖后,為其添加 Sprite Skin 腳本,點擊 Create Bones 按鈕,將生成骨骼

    ? 按照圖集中圖片的父子關(guān)系繼續(xù)拖入場景中,可以修改圖片 Sprite Renderer 組件上的 Order In Layer 參數(shù)來調(diào)整圖片的前后顯示

    (三)psb 圖片骨骼編輯

    ? PS(photoshop)是一款強大的圖像處理軟件,在各領(lǐng)域都被廣泛使用,在游戲行業(yè)中也是美術(shù)同學使用最多的圖像處理軟件之一

    ? PSD 和 PSB 兩種格式,都是 PS 這款軟件用于保存圖像處理數(shù)據(jù)的文件格式

    ? PSD 和 PSB 兩種格式并沒有太大的區(qū)別,最大的區(qū)別是 PSD 格式兼容除 PS 以外的其它一些軟件,而 PSB 只能用 PS 打開

    ? 在 Unity 中官方建議使用 PSB 格式,需要在 Packages Manager 窗口中引入 2D PSD Importer 工具包

    ? PSB 文件關(guān)鍵參數(shù):

    ? PSB 文件也是一種圖片文件,因此大多數(shù)參數(shù)與一般的圖片參數(shù)一致(見 圖片導入與圖片設(shè)置),這里主要講解其獨有的參數(shù)

  • Extrude Edges:圖片邊緣延伸網(wǎng)格,一般不修改
  • Import Hidden:是否導入 PSB 文件中隱藏的圖層,一般不勾選
  • Moszic:啟用后,將圖層生成 Sprite,并將它們合并成單個紋理,默認勾選
  • Character Rig:是否啟用人物已經(jīng)綁定的骨骼,默認勾選
  • Use Layer Grouping:使用 PSB 文件中的層分組
  • Pivot:軸心點位置
  • Reslice:從導入層重新生成 Sprite,并清除對 Sprite 的任何更改,只有啟用 Moszic 后有用
  • Keep Duplicate Name:讓 Sprite 名稱保留 PSB 文件中的名字
  • ? 骨骼編輯界面變化:

    ? 在為每一個圖層生成蒙皮時,可能會覆蓋其他圖層的骨骼,這時可以在 Bone Influence 選項界面中設(shè)置影響的骨骼

    三、反向動力學 IK

    ? 在骨骼動畫中,構(gòu)建骨骼的方法被稱為正向動力學,它的表現(xiàn)形式是,子骨骼(關(guān)節(jié))的位置根據(jù)父骨骼(關(guān)節(jié))的旋轉(zhuǎn)而改變

    ? 用我們?nèi)梭w舉例子,當我們抬起手臂時,是肩部關(guān)節(jié)帶動的整個手臂的運動,用父子骨骼理解的話就是父帶動了子

    ? IK 全稱是 Inverse Kinematics,翻譯過來的意思就是反向動力學的意思

    ? 它和正向動力學恰恰相反,它的表現(xiàn)形式是,子骨骼(關(guān)節(jié))末端的位置改變會帶動自己以及自己的父骨骼(關(guān)節(jié))旋轉(zhuǎn)

    ? 用我們?nèi)梭w舉例子,當我們拿起一個杯子的時候是用手掌去拿,以杯子為參照物,我們移動杯子的位置,手臂會隨著杯子一起移動

    ? 用父子骨骼理解的話就是子帶動了父

    ? 在 Package Manager 窗口中引入 2D IK 工具包,需要在 Advanced 高級選項中選中 Show preview packages(顯示預(yù)覽包),這樣才能看到2D IK相關(guān)內(nèi)容

    ? 注意:如果在引入包時報錯,需要在 Windows 防火墻中添加入站規(guī)則

    (一)IK Manager 2D

    ? 將上一小節(jié)的 PSB 文件拖入 Hierarchy 窗口中,為其創(chuàng)建父對象 Player 來方便管理,給 Player 添加 IK Manager 2D 腳本

  • IK Solvers:IK 解算器,在這里添加 IK
    • Chain(CCD):可以自定義影響 N 個關(guān)節(jié)點,不能反向
    • Chain(FABRIK):可以自定義影響 N 個關(guān)節(jié)點,可以反向
    • Limb:只會影響 3 個關(guān)節(jié)點,一般用于控制四肢
  • Weight:權(quán)重,當有多個 IK 控制同一點時,權(quán)重會影響控制的百分比
  • Restore Default Pose:恢復默認位置
  • ? 添加完成后,為需要添加 IK 效果的骨骼新建一個空物體 IK,并將其位置移動到骨骼末端位置處

    ? 在 IK Manager 2D 腳本中點擊加號,新建一個 IK 對象,會發(fā)現(xiàn)在 Player 下面多了一個 IK 對象并掛載了對應(yīng)的腳本

    (二)CCD Solver 2D

  • Effector:默認的 IK 點位置
  • Target:根據(jù) IK 點位置生成的 IK 對象,
  • Chain Length:IK 影響骨骼的數(shù)量,設(shè)置成功后,會發(fā)現(xiàn)被關(guān)聯(lián)的骨骼會出現(xiàn)綠色的圓圈
  • Iterations:算法運行的次數(shù),一般不修改
  • Tolerance:容錯程度,一般不修改
  • Velocity:速度,一般不修改
  • Constrain Rotation:約束旋轉(zhuǎn)程度
  • Solve from Default Pose:從默認姿勢進行求解計算
  • Weight:權(quán)重
  • ? 設(shè)置好參數(shù)后,點擊 Create Target,Target 會被創(chuàng)建在該腳本掛載的物體的子物體上并被自動關(guān)聯(lián)

    (三)Fabrik Solver 2D

  • Effector:默認的 IK 點位置
  • Target:根據(jù) IK 點位置生成的 IK 對象,
  • Chain Length:IK 影響骨骼的數(shù)量,設(shè)置成功后,會發(fā)現(xiàn)被關(guān)聯(lián)的骨骼會出現(xiàn)綠色的圓圈(顏色可以設(shè)置)
  • Iterations:算法運行的次數(shù),一般不修改
  • Tolerance:容錯程度,一般不修改
  • Constrain Rotation:約束旋轉(zhuǎn)程度
  • Solve from Default Pose:從默認姿勢進行求解計算
  • Weight:權(quán)重
  • (四)Limb Solver 2D

  • Effector:默認的 IK 點位置
  • Target:根據(jù) IK 點位置生成的 IK 對象,
  • Flip:旋轉(zhuǎn)反向,用于控制 IK 的旋轉(zhuǎn)方向
  • Constrain Rotation:約束旋轉(zhuǎn)程度
  • Solve from Default Pose:從默認姿勢進行求解計算
  • Weight:權(quán)重
  • ? IK 的用處:

    • 瞄準功能
    • 頭部朝向功能
    • 拾取物品功能

    ? 對于有指向性的功能,我們都可以通過 IK 來達到目的最大的作用,可以方便我們進行動畫制作

    四、換裝

    (一)在同一個 psb 文件中制作換裝資源

    • 在 ps 中制作美術(shù)資源時,將一個游戲?qū)ο蟮乃袚Q裝資源都擺放好位置
    • 當我們導入該資源時,要注意是否導入了隱藏的圖層

    ? 在右側(cè)的 Visibility 面板上為每一個圖層設(shè)置分類,右邊的標簽相當于其在分類中的名稱

    ? 注意事項:

    • 每個部位 關(guān)聯(lián)的骨骼要明確設(shè)置
    • 為同一個部位的不同裝備分組

    ? 骨骼、蒙皮設(shè)置完成后,將圖片導入場景中,會發(fā)現(xiàn)其自動添加了精靈資料庫 Sprite Library,用于確定類別分組信息

    ? 同時, Unity 會為每一個設(shè)置了類別的裝備添加精靈解算器 Sprite Resolver,用于確定部位類別和使用的圖片

    ? 使用代碼進行換裝示例:

    using UnityEngine.Experimental.U2D.Animation;private Dictionary<string, SpriteResolver> equipDic = new Dictionary<string, SpriteResolver>();// 1.獲取各部位的SpriteResolver(需要引用命名空間) // 2.使用SpriteResolver的API進行裝備切換 // GetCategory() 獲取當前部位默認的類別名 // SetCategoryAndLabel 設(shè)置當前部位想要切換的圖片信息private void Start() {SpriteResolver[] srs = this.GetComponentsInChildren<SpriteResolver>();for (int i = 0; i < srs.Length; i++) {equipDic.Add(srs[i].GetCategory(), srs[i]);}ChangeEquip("Cask", "CASK 1"); }public void ChangeEquip(string category, string equipName) {if (equipDic.ContainsKey(category)) {equipDic[category].SetCategoryAndLabel(category, equipName);} }

    (二)在不同 psb 文件中制作換裝資源

    ? 保證個部位在 PS 文件中的統(tǒng)一,基礎(chǔ)部位可選擇性隱藏

    ? 注意事項:不同文件的骨骼信息必須統(tǒng)一,所以我們直接使用復制的方式

  • 首先創(chuàng)建 Sprite Library Asset 數(shù)據(jù)文件,對參數(shù)其進行設(shè)置

  • 為根對象添加 Sprite Library 并關(guān)聯(lián)數(shù)據(jù)文件

  • 為換裝部位關(guān)聯(lián) Sprite Resolver

  • ? 換裝較少的游戲,比如只有面部表情更換,可以使用同一 psb 文件方案

    ? 換裝較多的游戲,比如各部位有 n 種裝備,可以使用不同 psb 文件方案,拓展性更強

    ? 一切根據(jù)需求而定

    五、骨骼動畫 —— Spine

    ? Spine 是一個收費的跨平臺的 2D 骨骼動畫制作工具,它支持 Unity,UE,Cocos2D,Cocos2D-x 等等游戲引擎

    ? 相對 Unity 2018 才推出的 2D Animation,Spine 是目前商業(yè)游戲中較為常用的骨骼動畫制作方案 穩(wěn)定且高效

    ? 官方地址:http://zh.esotericsoftware.com/

    ? 制作骨骼動畫是美術(shù)人員的工作,除非你是要做獨立游戲,美術(shù)程序一人包,那么我們沒有必要去學習如何通過 Spine 制作骨骼動畫

    ? 我們只需要學習如何在 Unity 中通過程序使用 Spine 制作的資源

    ? 如果想要學習如何制作 Spine 骨骼動畫,可以根據(jù)官網(wǎng)提供的教學內(nèi)容進行學習

    ? 有了 Spine 提供的支持 Unity 開發(fā)的運行庫,我們才能在 Unity 中使用 Spine 制作的骨骼動畫
    ? 你可以簡單理解其實就是官方寫好的識別文件處理文件呈現(xiàn)效果的代碼
    ? 我們只需要學習如何使用它提供的 API 即可

    (一)骨骼動畫使用

    ? Spine 導出的資源有 3 個文件:

    • .json 存儲了骨骼信息
    • .png 使用的圖片圖集
    • .atlas.txt 圖片在圖集中的位置信息

    ? 當我們把這三個資源導入到已經(jīng)引入了 Spine 運行庫的 Unity 工程后,會自動為我們生成:

    • _Atlas 材質(zhì)和 .atlas.txt 文件的引用配置文件
    • _Material 材質(zhì)文件
    • _Skeleton Data、json 和 _Atlas 資源的引用配置文件

    ? 創(chuàng)建動畫的兩種方式:

  • 直接將 _Skeleton Data 文件拖入到場景中,選擇創(chuàng)建 Skeleton Animation 對象
  • 創(chuàng)建空對象,然后手動添加腳本 Skeleton Animation 進行關(guān)聯(lián)
  • (二)骨骼動畫參數(shù)

    ? 骨骼數(shù)據(jù)文件:

  • Skeleton JSON:骨骼數(shù)據(jù)文件
  • Scale:縮放大小
  • Skeleton Data Modifiers:骨骼數(shù)據(jù)修改器
  • Blend Mode Materials:混合模式材質(zhì)
  • Apply Additive Material:是否使用疊加材質(zhì)
  • Additive Material:疊加材質(zhì)
  • Multiply Material:相乘材質(zhì)
  • Screen Material:屏幕材質(zhì)
  • Atlas Assets:圖集資源
  • Mix Setting:混合設(shè)置
    • Animation State Data:動畫狀態(tài)數(shù)據(jù)
    • Default Mix Duration:默認混合持續(xù)時間
    • Add Custom Mix:添加自定義混合
  • Animations:動畫
  • Setup Pose:設(shè)置姿勢
  • Create Animation Reference Assets:創(chuàng)建動畫參考資源
  • Slots:插槽,一個部位有多張圖片構(gòu)成,可以在這里預(yù)覽
  • Skeleton Mecanim:骨骼控制
  • Controller:關(guān)聯(lián)動畫控制器
  • ? 骨骼動畫腳本:

  • Skeleton Data Asset:關(guān)聯(lián)的骨骼動畫信息

  • Sorting Layer:所在排序?qū)?/p>

  • Order in Layer:排序?qū)拥男蛱?/p>

  • Mask Interaction:與精靈遮罩交互的方式

    • None:不與場景中任何精靈遮罩交互
    • Visible Inside mask:精靈遮罩覆蓋的地方可見,而遮罩外部不可見
    • Visible Outside mask:精靈遮罩外部的地方可見,而遮罩覆蓋處不可見
  • Advanced:高級設(shè)置,一般不修改,了解即可

    • Initial Flip X / Y:初始反轉(zhuǎn) X / Y
    • Update When Invisible:不可見時是否更新
      • Nothing:不更新
      • Only Animation Status:僅動畫狀態(tài)
      • Only Event Timelines:僅事件
      • Everything Excepts Mesh:除了網(wǎng)格其他都更新
      • Full Update:更新所有
    • Use Single Submesh:使用單個子網(wǎng)格
    • Fix Draw Order:固定提取順序
    • Immutable Triangles:不變?nèi)切?/li>
    • Clear State On Disable:禁用時清除狀態(tài)
    • Separator Slot Names:分隔符插槽名稱
    • Z Spacing:Z 間距
    • Vertex Data:頂點數(shù)據(jù)
      • PMA Vertex Colors:PMA 頂點顏色
      • Tint Black:淡黑色
      • Add Normals:添加法線
      • Solve Tangents:求解切線
    • Add Skeleton Utility:添加骨骼公共程序
  • Animation Name:當前播放的動畫名

  • Loop:是否循環(huán)

  • Initial Skin:初始蒙皮

    美術(shù)在制作時可能有幾套蒙皮,一般情況下只需要一套

  • Time Scale:時間縮放,值越大,動畫播放的越快

  • Root Motion:是否添加根運動的腳本,一般不添加

  • (三)骨骼動畫代碼

    using Spine; using Spine.Unity; using UnityEngine;private SkeletonAnimation sa;[SpineAnimation] // 可以在Unity面板中選擇動畫,而不是填入字符串 public string jumpName;[SpineBone] // 可以在Unity面板中選擇骨骼,而不是填入字符串 public string boneName;[SpineSlot] // 可以在Unity面板中選擇部位,而不是填入字符串 public string slotName;[SpineAttachment] // 可以在Unity面板中選擇附件,而不是填入字符串 public string attachmentName;// Start is called before the first frame update void Start() {sa = this.GetComponent<SkeletonAnimation>();// 動畫播放// 方法一:直接改變SkeletonAnimation中參數(shù)// 需要先改循環(huán)為false后再設(shè)置動畫sa.loop = true;sa.AnimationName = "jump";// 方法二:使用SkeletonAnimation中動畫狀態(tài)改變的函數(shù)// 馬上播放sa.AnimationState.SetAnimation(0, jumpName, false);// 排隊播放sa.AnimationState.AddAnimation(0, "walk", true, 0);// 轉(zhuǎn)向sa.skeleton.ScaleX = -1;// 動畫事件// 動畫開始播放sa.AnimationState.Start += (t) => { print(sa.AnimationName + "動畫開始播放"); };// 動畫被中斷或者清除sa.AnimationState.End += (t) => { print(sa.AnimationName + "動畫中斷或者清除"); };// 播放完成sa.AnimationState.Complete += (t) => { print(sa.AnimationName + "動畫播放完成"); };// 做動畫時添加的自定義事件sa.AnimationState.Event += (t, e) => { print(sa.AnimationName + "自定義事件"); };// 便捷特性// 動畫特性 [SpineAnimation] // 骨骼特性 [SpineBone] // 插槽特性 [SpineSlot] // 附件特性 [SpineAttachment] // 獲取骨骼、設(shè)置插槽附件// 獲取骨骼Bone b = sa.skeleton.FindBone(boneName);sa.skeleton.SetAttachment(slotName, attachmentName);// 在UI中使用// SkeletonGraphic(UnityUI) }

    總結(jié)

    以上是生活随笔為你收集整理的2022-05-14 Unity核心7——2D动画的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。