Mecanim動畫系統

本期教程和大家分享Mecanim動畫系統的重定向特性,Mecanim動畫系統是Unity3D推出的全新的動畫系統,具有重定向、可融合等諸多新特性,通過和美工人員的緊密合作,可以幫助程序設計人員快速地設計出角色動畫。一起跟著人氣博主秦元培學習吧!
博主今天想和大家分享的是Mecanim動畫系統的重定向特性,眾所周知,《仙劍奇俠傳》是一部經典的RPG游戲,這部游戲到今天依然煥發著強大的生命力。博主在網上認識了一個制作《仙劍奇俠傳》同人游戲的小團隊,他們目前正在著手制作一個稱為《仙劍奇俠傳五外傳:心愿》的同人游戲,該游戲基于Unity3D,由于技術上的一致性,博主向他們索取了一些游戲素材,而這成為了博主決心要研究Mecanim動畫系統的一個主要原因。如圖是《仙劍奇俠傳五前傳》中瑕的一個模型:

1

拿到這個模型的時候,博主發現這個模型的所有動畫都是放在一個AnimationClip中的,所以博主果斷將這個動畫文件進行了分割,分割的方法是在資源目錄中找到這個AnimationClip,然后在右側的屬性窗口中選擇Animations選項卡中通過+號來新建一個AnmationClip,在指定了起點幀數和終點幀數后就實現對動畫的分割。如圖示博主經過分割后的動畫文件列表:

2

可以看到這里博主將一個動畫片段分割成了4個動畫片段,這樣我們就可以通過Animation組件來實現對動畫的播放。而這正是在Mecanim動畫系統推出之前Unity3D采用的動畫控制形式。由于這個模型在建模的時候存在問題,所以導致瑕在游戲場景中的角度出現錯誤,博主只好自己用3D建模軟件進行調整,結果意外得發現瑕的模型中是有骨骼的,博主忽然間想到了一個問題,是否可以利用Mecanim動畫系統來為這個模型添加動畫呢?答案是肯定的。由于這個模型在建模的時候將動畫和模型一起創建了,因此我們需要首先將這個動畫從模型中去除,因為Mecanim動畫系統的一個主要思路就是讓一套動畫可以通過重定向應用到不同的模型上,既然有動畫可用,那么模型自帶的動畫可以暫時去除。而讓動畫從模型中去除的方法很簡單,就是在導出FBX模型的時候將嵌入的媒體選項不要勾選,這樣我們的模型就可以和動畫分離開了,經過這一步后,我們正式開始Mecanim動畫系統的講解。要理解Mecanim動畫系統,首先需要了解這樣幾個概念:
一、Avater,即阿凡達,這是Mecanim動畫系統中實現動畫綁定的一個接口,該接口可以實現骨骼和肌肉系統的匹配,從而保證角色在執行動畫的時候,角色能夠按照預先設定的動畫來運動。我們首先在項目資源窗口中找到了模型文件,如圖:

3

我們注意到在右側的屬性窗口中有三個選項卡:Model、Rig、Animations。這里我們選擇Rig選項卡,將Animation Type設為Humanoid,即雙足類型的動畫。這種類型可以支持大多數的類人形的模型。此外,Lagacy類型用來兼容Unity3D低版本中的模型動畫,Generic類型是一種介于人形和非人形的模型之間的通用類型。我們選擇Humanoid類型后,在下方選擇生成Avater的類型誒Create Form This Model,即通過當前的模型來生成一個Avater。此時,Configure按鈕由不可用狀態變成可用狀態,我們點擊該按鈕,如果我們沒有保存游戲場景的話,此時Unity3D會提示我們保存場景,我們直接選擇保存,接下來回打開一個新的場景,如圖:

4

此時場景中會顯示模型的骨骼結構,對應地,在右側窗口中顯示了該模型主要的身體結構,可以看到此時右側窗口中所有的點都是以綠色顯示的,這表示當前模型的骨骼關節和模型匹配正確。此時,我們可以切換到Muscles選項卡中,這是我們可以通過拖動滑塊來檢查模型匹配是否正確。在使用Avater的時候,有兩點需要注意:
1、如果模型建模沒有嚴重的錯誤的話,可以通過窗口底部的Mipping->AutoMap來實現對模型的自動匹配,這一點可以提高工作效率,但是作為一名有節操的開發人員,我們絕不能過度地依賴于這一功能。
2、當在手動調整模型匹配時,如果提示T-Pose錯誤,可以通過Pose->Enforce T-Pose來實現強制轉化,博主最近才開始學習游戲建模,所以這里可能暫時無法解釋清楚,大家就作為經驗之談來看吧。
確認模型匹配沒有什么問題后,點擊Done完成編輯。
二、AnimatorController:如果說Avater是將模型的身體和骨骼實現匹配的接口,那么AnimatorController就是講動畫和模型實現綁定的接口。我們這里創建一個XiaAnimaterController。雙擊該文件,會打開Animator窗口,如圖:

5

博主這里不想詳細介紹關于Unity3D動畫系統中的狀態機和混合樹等概念,因為這些概念現在解釋起來實在困難,博主打算放在下一篇文章中來詳細的講解Mecanim動畫的狀態機和混合樹的概念。今天我們只是對Mecanim動畫系統做一個初步的了解,因為要想徹底理解這個動畫系統,絕非一朝一夕之功啊。博主在這里創建了6種動畫狀態,并通過帶箭頭的線條將它們連了起來。博主這里想實現什么功能呢?博主希望在一定條件下可以觸發相應的條件,當出發結束后立即回到默認的狀態,這里默認的狀態是Idle。估計大家到這里會有點混亂,博主前面不是說這個模型沒有動畫的嘛,那么這個的動畫是哪里來的呢?對此,博主這里做一下解釋啊,博主在創建這個項目之前呢,提前準備了一個叫做WomanKnightAnimationPack的動畫包,它提供了游戲中常用的動畫,我們這里就是要通過Mecanim的重定向功能將這個動畫運用到我們的模型上去,這個動畫包可以從官方的資源商店中下載。好了,現在我們來講解怎么講動畫和模型綁定,我們單擊默認的Idle動畫,在窗口右側將會顯示如下內容:

6

通過Motion文本框我們可以為當前的狀態綁定一種動畫,選中Foot IK和Mirror這兩個選項,似乎可以解決角色在行走或者奔跑過程中出現的問題,可是博主在查API文檔的時候并沒有找到相關的解釋,如果有朋友知道的話,希望可以告訴博主啊。類似地,我們可以為不同的狀態綁定一個動畫片段,可是問題馬上又來了,我們如何按照游戲策劃在適當地時候播放相應的動畫呢?這就是動畫的觸發問題了,博主請大家想一想有限狀態機的概念,如果不知道這個概念的,請自行了解,這是游戲設計中非常重要、非常有用的一個概念。我們知道在有限狀態機中,無論我們使用switch-case結構還是if-else結構,都需要一個狀態值來作為判斷的依據,那么在Mecanim中這個原則依然適用。因為,Mecanim動畫系統就是基于狀態機的。好了,下面我們來創建一個狀態值。如圖,

7

在Mecanim動畫系統中提供了四種類型的狀態值,分別是Float、Int、Bool、Trigger,其中Trigger和OnTrigger()方法可以聯用,實現觸發式播放動畫。好了,現在我們創建一個整型的狀態值,默認值為0。我們首先選中Idle->Walk這條路線,在右側的窗口中將參數設為ActionID,將值設為1,將方法設為Equals,其含義是當ActionID的取值為1時將執行Walk動畫。同樣地,我們將Walk->Idle這條路線選中,設將參數設為ActionID,將值設為0,將方法設為Equals,其含義是當ActionID的取值為1時將執行Idle動畫。其余的動畫狀態參數和Walk設置方法相同,從Idle出發的線路依次為1,2,3,4,5,指向Idle的路線全部為0。現在我們將這個AnimatorController指定給場景中的模型,如圖:

8

此時我們運行程序,由于我們已經為瑕指定了默認的動畫,于是我們將看到:

9

雖然這個動畫和我們的瑕妹子搭配得有點違和,但是我們已經初步掌握了使用Mecanim動畫系統的方法,好了,下面我們來編寫一段腳本來控制人物切換動畫,因為只有默認動畫是沒有什么實際用途的:

10

11

最后我們一起來看實際的效果吧!

12

場景中的地形由Unity3D自帶的地形工具創建,其實博主是想搭建一個《仙劍奇俠傳五前傳》中的云來石的場景,因為博主堅信,憑借瑾軒的智慧怎么會想不到在和瑕雙雙墜崖后召喚云來石呢,所以博主堅信他們倆都沒有死,因為暮姐最后回眸的一瞬間表情是喜悅的,而背后傳來了一急一慢兩種腳步聲,所以結局大家可以自己去想象啦。在同人游戲《仙劍奇俠傳五后傳:心愿》中他們策劃的劇情和博主的基本一致,或許這就是《仙劍奇俠傳》系列游戲之所以能讓博主一直愿意樂觀下去、努力下去的原因吧,我們都是普通人,可是我們并不是因為普通而普通,而是我們選擇了不作為。以前博主聽說過一款由仙劍玩家發起的游戲《仙劍奇俠傳四:回到起點》,當時看到游戲的宣傳動畫時激動了好一陣子,可是到了后來這部游戲因為制作團隊的解散而宣布停止,這似乎總讓人想起上海軟星的過去。細心的朋友一定發現了博主使用的素材是仙劍四中的模型,可以發現這個模型是較為簡陋的,樹木基本上是紙片拼成的,影子是在模型里創建的,當年弓長君帶領上軟制作仙劍三、仙劍三外傳、仙劍四的艱難程度可窺一斑。不過目前由上軟核心骨干組成的上海燭龍已經從當年的困境中走了出來,成為和大宇雙劍抗衡的第三把劍。為何博主總是鐘情于劍呢?因為劍的傳說,直到永恒。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388185.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【嵌入式硬件Esp32】Ubuntu 1804下ESP32交叉編譯環境搭建

一、ESP32概述EPS32是樂鑫最新推出的集成2.4GWi-Fi和藍牙雙模的單芯片方案,采用臺積電(TSMC)超低功耗的40nm工藝,擁有最佳的功耗性能、射頻性能、穩定性、通用性和可靠性,適用于多種應用和不同的功耗要求。 ESP32搭載低功耗的Xtensa LX6 32bi…

你認為已經過時的C語言,是如何影響500萬程序員的?...

看招聘職位要c語言的占比真不多了,是否c語言真得落伍了? 看一下許多招聘平臺有關于找純粹的c語言開發的占比確實沒有很多,都被Java,php,python等等語言刷屏。這對于入門正在學習c語言的小白真他媽就是驚天霹靂&#xf…

換熱站起停條件

循環泵 自動條件: 一、循環泵啟動條件 兩臺泵/三臺泵: 1)本循環泵在遠程狀態 2)本循環泵自動狀態 3)本循環泵沒有故障 4)二次網的回水壓力(測量值)>設定值 5)…

云尚制片管理系統_電影制片廠的未來

云尚制片管理系統Data visualization is a key step of any data science project. During the process of exploratory data analysis, visualizing data allows us to locate outliers and identify distribution, helping us to control for possible biases in our data ea…

JAVA單向鏈表實現

JAVA單向鏈表實現 單向鏈表 鏈表和數組一樣是一種最常用的線性數據結構,兩者各有優缺點。數組我們知道是在內存上的一塊連續的空間構成,所以其元素訪問可以通過下標進行,隨機訪問速度很快,但數組也有其缺點,由于數組的…

軟件公司管理基本原則

商業人格:獨立履行責任 獨立堅持原則兩大要素:1)靠原則做事,原則高于一切。2)靠結果做交換,我要什么我清楚兩個標準: 1)我不是孩子,我不需要照顧2)承認邏輯,我履行我的責任社會人心態: 1)用社會…

201771010102 常惠琢《面向對象程序設計(java)》第八周學習總結

1、實驗目的與要求 (1) 掌握接口定義方法; (2) 掌握實現接口類的定義要求; (3) 掌握實現了接口類的使用要求; (4) 掌握程序回調設計模式; (5) 掌握Comparator接口用法; (6) 掌握對象淺層拷貝與深層拷貝方法&#xff1b…

新版 Android 已支持 FIDO2 標準,免密登錄應用或網站

谷歌剛剛宣布了與 FIDO 聯盟達成的最新合作,為 Android 用戶帶來了無需密碼、即可登錄網站或應用的便捷選項。 這項服務基于 FIDO2 標準實現,任何運行 Android 7.0 及后續版本的設備,都可以在升級最新版 Google Play 服務后,通過指…

t-sne原理解釋_T-SNE解釋-數學與直覺

t-sne原理解釋The method of t-distributed Stochastic Neighbor Embedding (t-SNE) is a method for dimensionality reduction, used mainly for visualization of data in 2D and 3D maps. This method can find non-linear connections in the data and therefore it is hi…

oracle操作

imp kfqrlcs/kfqrlcshx fileC:\kfqrlcs.dmp fully //創建臨時表空間 create temporary tablespace kfqrlcs_temp tempfile C:\oracledata\kfqrlcs_temp.dbf size 32m autoextend on next 32m maxsize 8048m extent management local; //tempfile參數必須有 //創建數據表…

strust2自定義攔截器

1.創建一個攔截器類,繼承MethodFilterInterceptor類,實現doIntercept方法 package com.yqg.bos.web.interceptor;import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; import com.y…

Android Studio如何減小APK體積

最近在用AndroidStudio開發一個小計算器,代碼加起來還不到200行。但是遇到一個問題,導出的APK文件大小竟然達到了1034K。這不科學,于是就自己動手精簡APK。下面我們大家一起學習怎么縮小一個APK的大小,以hello world為例。 新建工…

js合并同類數組里面的對象_通過同類群組保留估算客戶生命周期價值

js合并同類數組里面的對象This is Part I of the two-part series dedicated to estimating customer lifetime value. In this post, I will describe how to estimate LTV, on a conceptual level, in order to explain what we’re going to be doing in Part II with the P…

C#解析HTML

第一種方法:用正則表達式來分析 [csharp] view plaincopy 轉自網上的一個實例:所有的href都抽取出來: using System; using System.Net; using System.Text; using System.Text.RegularExpressions; namespace HttpGet { c…

幫助開發人員學習

在瀏覽器中使用真實環境學習新技術 https://www.katacoda.com/ 轉載于:https://www.cnblogs.com/zuxing/p/9829143.html

【轉】SASS用法指南

SASS用法指南 阮一峰的,偏sass用法教程sass入門 偏實戰的基礎用法

com編程創建快捷方式中文_如何以編程方式為博客創建wordcloud?

com編程創建快捷方式中文Recently, I was in need of an image for our blog and wanted it to have some wow effect or at least a better fit than anything typical we’ve been using. Pondering over ideas for a while, word cloud flashed in my mind. 💡Us…

ETL技術入門之ETL初認識

ETL技術入門之ETL初認識 分類: etl2014-07-10 23:11 3021人閱讀 評論(2) 收藏 舉報數據倉庫商業價值etlbi目錄(?)[-] ETL是什么先說下背景知識下面給下ETL的詳細解釋定義現在來看下kettle的transformation文件一個最簡單的E過程例子windows環境 上圖左邊的是打開表…

ActiveSupport::Concern 和 gem 'name_of_person'(300?) 的內部運行機制分析

理解ActiveRecord::Concern: 參考:include和extend的區別: https://www.cnblogs.com/chentianwei/p/9408963.html 傳統的模塊看起來像: module Mdef self.included(base)# base(一個類)擴展了一個模塊"ClassMethods", b…

Python 3.8.0a2 發布,面向對象編程語言

百度智能云 云生態狂歡季 熱門云產品1折起>>> Python 3.8.0a2 發布了,這是 3.8 系列計劃中 4 個 alpha 版本的第 2 個。 alpha 版本旨在更加易于測試新功能和 bug 修復狀態,以及發布流程。在 alpha 階段會添加新功能,直到 beta 階…