創作內容

5 GP

Unity 交流作 - 2D平台遊戲(三)美術篇II

作者:KK│2020-06-17 18:42:47│巴幣:10│人氣:1591

在經過一段時間的歷練,
我們繼續把這系列更新下去。
希望可以更言之有物,
並且是真的實用的技巧分享。
加油!

一樣,先附上專案連結,可以從裡面參考或修改。
那麼,本文開始!


角色替換

之前提到,我想把忍者換成我自己畫的 Q 版角色、吉祥物,或其他人物。
我該怎麼做呢??



隨便挑一張專案中遊戲的圖片來看。( 可以從 Assets/PC2D/Sprites/Player 裡找到  )

看一下圖片存在 Unity 中的資訊,特別標註的紅框處,
這是一張原圖 32*32 大小的圖片,所以我們需要同樣大小的圖嗎?
別急,還有另一個重要資訊,黃框處所顯示的 Pixels Per Unit 欄位的值,8 !!

讓我們從它在 Unity 裡的定義這個角度去了解背後的原理。

官方文件說明, Pixels Per Unit 是在世界座標中 1 個單位顯示多少像素。
那麼這個世界座標,我們可以從鏡頭上正投影的數值去推算,
這個值表示了垂直軸所占的空間有幾個單位的延伸。



以畫面為中心,以解析度為比例可以算出遊戲畫面會有多少的單位組成。

以上圖的黃框標示,這邊使用的解析度 1280 * 720 (16:9) 來說。
垂直的單位是 20,水平則有 20 * 16 / 9 ≒ 35.55
所以左右各還有 17.7 格的單位可以顯示。

知道單位後,我們就可以回頭再看第一張圖的含意,
忍者圖是一張 32 * 32 大小的圖,且設定了 Pixels Per Unit = 8
所以這張圖在 Scale 不改變的情況下,在畫面上是長寬各 4 單位的顯示。



Scene 場景上可以看到這張圖的顯示線,在畫上跟剛剛一樣的比例線就更好觀察。

那是因為這個忍者圖不是滿版的,是一張周遭留空非常大的 32 * 32 的圖,
所以會有比例錯覺,但確實是 4 個單位左右。

接著回到問題,所以我們想要換圖,一定要同樣大小的圖嗎?
答案是不一定,假設你已經有一組 100 * 100 的吉祥物設計圖,
那就直接套上來用就好,改一下 Pixels Per Unit 的設定,算個數學......
目標是跟這個專案上顯示的大小相近,那就一樣 4 單位。
所以填上 100 / 4 = 25 就好。



用一張 Plash Speed 5 滿版且沒去背的鴨子來舉例,這樣就能完美換圖了。

此外,Pixels Per Unit 這個數值的設定,其實物理運算也有吃這個單位比例,
例如人型它們設計 1.7~1.8 個單位,還有一些 3D 光照的運算也有作用,
所以如果發現物理運算怎麼結果異常奇怪,卻找不到哪邊有原因時,
不妨改改這個單位數值看看有沒有正常一點。

=> 2D 雖然受影響較小,但還是要注意,
同樣的施力 AddForce 對大單位的東西效果是有差別的。

另外就是 TileMap 了,官方建議是一片等於 1 單位!
另一個建議是,圖都盡量畫大,因為縮小處理沒事,但要無損放大就有點困難了。
如果是 UI 上顯示的部分,會單純一點,因為有 CanvasScaler 可以去縮放;
所以比較方便一點,對這塊細節很有興趣的人也可以去 K 一下官方文件。


動畫


換上自己角色的圖之後,想要照著同樣功能、同樣角色操作,
製作動畫的話,又該準備些什麼呢?



以角色跑步動畫為例子說明。

下圖顯示是 1frame 就換一張圖,其實紅框處的圖都有些差異,
手的位置跟腳的位置都不一樣,而這個 frame 在遊戲中實際播放速度,
就是根據你遊玩時的 Frames per second ( 俗稱的 FPS ) 來決定。
硬體規格越好,相對地這個值會越高;另一個角度來看,
遊戲的效能越好( 優化處理得好),這個值也要相對的高,

反之則是突然大資源開銷、資源釋放時機不正確、又在低階設備上玩這個遊戲,
跑步動畫好像卡了一下,比較慢一點?!
除非時非常大的差距,不然幾個 frame 的差別肉眼其實很難分辨,
( 也許有些動畫師可以做到吧?話還是語帶保留好了。 )

忍者跑步動畫,很單純地用了 5frame1 frame 換一張圖,
這個頻率是非常快的,如果在實際播放動畫時你還想調整的話;
不一定要去修改動畫換圖間距,直接修改黃框的 speed 就好。

快速掃描了其它動畫後,只有跑步這個用到五張圖去輪播。
其它狀態都是換上一張圖去維持顯示,所以相對好替換。
那麼,回到替換的方式,相對單純的方法就是暴力的把所有命名的圖都換成你的圖;
調整一下剛剛所提到 Pixels Per Unit 的設定,就搞定了。

但是希望保留忍者,又新增角色的話,
就建議新增一個 Animator ,新增這些相對應指令的動作狀態,
再掛上各自的 Animation,這樣的方法較好!

=> 另外專案內有 Ninja.psd 檔,要換個頭巾,換個顏色滿方便的。



歡迎隨意修改或新增其它動畫,不用像素點也是可以的!


MipMap


在這篇最後的篇幅,提一個有趣的東西,
圖的 MipMap 設定,在我參與過專案製作的經驗中,
這個是被前輩告知:
「不要開這個設定,這設定會讓圖片需要的記憶體變多,我們用不到。」
這樣帶過的一個充滿神秘感的參數。
事後漸漸了解這塊後,稍微在此做點解密。

MipMap 是一種圖學技術,利用 2 的冪次方將圖處理成預處理的小圖組成的資料。
先放上一張來自 wiki 的圖用以繼續說明。



一張衛星圖存成 MipMap,會變成上面這樣拼成一個圖片格式。

原本只要紀錄一張圖片大小的狀況,變成會多後面那一串,
這就是為什麼記憶體會變多的原因,另外這也是有數學推導的,
但再講下去美術篇就變成數學篇了,直接跳結論,會多 33% 記憶體開銷。

那麼,多存這些圖有什麼好處呢?
大部分的時候,都是直接看到這張圖的細節,
不過當有些狀況衛星變小的時候、或者衛星跑到很遠的時候,
要成像的圖片離 Camera 距離變遠,其實不需要這麼多細節顯示,
就可以從適當層級的 MipMap 中挑選其它圖來顯示!

=> 如此一來就可以加快渲染速度跟減少鋸齒失真。

然後!然後!然後!
我發現 Unity 2018 後,居然有個有趣的東西,TextureStreaming
它可以玩出一個有趣的效果。



把圖片的產生 MipMap 打勾啟用,右下角的部分會出現一個拉 bar。( 此處是 Mip 1 了。)

試著拖移這個 bar,它會顯示這張圖各個級別的圖像。





可以很明顯看到它的變化。

而這個值最多可以設定到 6,這是固定的嗎?答案為不是,因圖大小而異。
因為我的圖大小是 100*100,用 2 的冪次方來看,介於 2^6 ~ 2^7
所以最多縮小的格式到 64*64 比例而已。

=> 這也是為什麼有些人的 Icon 需求會開 16*16, 32*32, 64*64......這種尺寸了。
其實吃這種設定的還不少喔,平台也有。

而且這個東西可以用 texture.mipMapBias 去玩喔XDDDDD
首先要在 ProjectSetting > Quality > 去把 texture streaming 打開。



它也會再提醒你,它會挪出一部分的記憶體作為 MipMap 的使用。

接著只要有辦法抓到 texture2D 的,就可以去修改 mipMapBias 的值。



可以玩出這種效果XDDDDD

不過呢!不確定是 UnityBug,還是我沒有研究透徹,
這是會直接改到原圖的設定的,所以使用上要小心;
我才在最開頭說這是一個有趣的好玩的東西,
而不是說大家快來使用這個效果!

=> 不過真的弄個不好圖壞掉了,重新匯入一次就可以解決了。


UI 篇我還是放到下一篇再繼續說,以上。
謝謝收看。

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4819592
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unity

留言共 2 篇留言

樂小呈
我圖片大小每次都憑感覺調[e5]

06-17 18:53

KK
其實我洋洋灑灑寫這麼多,我也是感覺派...很少會在用的時後努力算數學@Q@06-18 00:02
SAM in sfw
MipMap自古以來就很實用

06-17 23:16

KK
以前都被前輩說這是禁招,之後才知道有多好用XD"06-18 00:02
我要留言提醒:您尚未登入,請先登入再留言

5喜歡★nigel0813 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:網點練習... 後一篇:心血來潮的冷門技術研究...

追蹤私訊切換新版閱覽

作品資料夾

xzp83502在線巴哈們
果果日記小屋更新中 歡迎進來參觀 謝謝^^看更多我要大聲說昨天20:43


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】