創作內容

14 GP

Unity 小遊戲紙娃娃系統

作者:Kaye│2015-08-24 01:29:14│巴幣:28│人氣:3269
有見我發佈在自制遊戲的進度中有人問到]2D紙娃娃大概的做法。因此而來就有了這一篇文章,過程中大部分都是自己想的,應該不算太正統的做法,但也可以分享交流一下。

首先結果是這樣:


當然也可以局部的這樣:
而這個不只是單純變裝,更重要的是應用到遊戲內容上:

由於這個是初期計劃以外的想法,所以增加起來時其實是由固定角色的基礎附加上來的系統,和原生計劃要有定制系統的做法也許有點分別。
也希望交流一下不同概念方案和制作方式。

本系統的限制和本文會提到的事

-角色必需是一個prefab的方式存在.(這應該不難改出來的會說一下)
-一定要懂cut out animation.(這個這裡不會教)
-自定義不同娃娃配件的獨立動畫是可以,但絕對不算方便。(會提一下概念,但不詳說)
-這個方式很難很難做deform / weight 的動畫,也相對地難制作frame animation(但我會分享一下大概怎樣做)
-幾種無法實現的娃娃系統(簡單來說我撞牆了的幾個想法。)

---------------------------------------------------------------------

必要技能樹

-cut out animation.
-C#
-Unity(animator)
-Unity(resource.load)
-hierarchy & anchor (這個是在unity中做cutout的基礎中的基礎)
---------------------------------------------------------------------

建議點的技能

-svg(向量圖) to fbx(3D物件)
-UVmapping
(這2點是在當你的遊戲不完全是2D的環境下所需要)

---------------------------------------------------------------------
請把內容完整看完才試,或是自行備份好內容。
改到一半很大機會會跟不來的。(主因是我語言說明等技巧問題)


前置作業

打從一開始,我先假設你已經有一支這樣子的角色:
empty:char
|-Body(sprite)
 |-L.Leg(sprite)
 |-R.Leg(sprite)
 |-LHand(sprite)
 |-RHand(sprite)
 |-Head(sprite)
  |-Fhair(sprite)
  |-Bhair(sprite)
  |-Face(sprite)
(總之這個結構怎樣也行,只要方便到你又會用到制作動話就可以,可以有無限層)
我也假設了這個結構中沒有空層...

而結果會改成這樣:

blue 是指哪一套衣服,而上一層的則是原本的sprite和animation所使用的Game object.
由於Unity 的animation好像是吃「名字」,所以改掉之後只要子物件的position和anchor 正確,就可以完全無誤地重現回原本的角色。
建議是rend出來的物件(上圖的blue),position是Vector3.zero .這樣會比較好設定和控制。
這是對角色prefab修改的前置作業。


而那一些(GameObject)Sprite prefab/ Mesh prefab 則是放在Resources之中,之後以resources.load的方法叫出來。
即是上上圖中的blue.在這上圖中每一個folder中也各有一個部件。
(請記住,這一些是有Sprite Render / Mesh Render 的 GameObject)
例子如下:

-----------------------------------------------------------------------------------------------------------------------
前置作業基本上完成,之後先談一下這個系統要提供的功能(邏輯層面)
簡單說法:要存和取Resource的東西再加/減角色身上的東西。

結構是:
Setting.cs 存起角色各部分的。
Char身上加一個Settup.cs 每次建立Char時按Setting.cs的存檔建立角色。
Settup.cs 同時也用來設定和即時修改.

-----------------------------------------------------------------------------------------------------------------------
Setting.cs中主要結構是一個Class,結構定名和Char prefab相同。
Char.Body.Head 之類的樣子,而最尾的則是一個String。
所以當我叫Setting.Char.Body.Head = "blue" 差不多樣子的東西。
叫Setting.Char.Leg = "blue"這樣。
簡單來說Setting 就是一個「理形」,是把String 那個名字的item放到Char中的某個位置。

Settup.cs中間要做的只有一件事,清理身上的全部東西和按照Setting把東西放置到Char上。
說得容易可是解決的問題不少。
1:你要查找到角色內全部的render並清除掉.
由於結構中有一些同時存在folder和sprite的層次.(如BODY和HEAD) 這方面可以有2個方式去想。
把有render的GameObject都刪掉。
把沒有Child的GameObject都刪掉。

2:按正確的位置放回正確的東西.
Setting 中已經提供了足夠的資料:那個部件的名字=那個String。部件的位置 = Class結構。
PATH = Class結構+"/"+String
Resource.load("PATH")

如果不知怎拆解的話也可以把Char中的各層empty folder 入到dictionary之中.
Dictionary<string, transform> Char
string放"body"
transform放Char.findChild("body")
之前要叫時就只要
Char.body
Char.Lleg
免除一層一層找的回想時間.(?)

那麼最後就可以直接有一個function:
void CreatePart(string item,transform Target)
Clone一件item 的prefab,
blue.setParent(Target)
blue.transform.localposition = Vector3.zero (這就是對齊0,0,0的好處了...)

讀方面大概就是這樣子,寫入則是:
Settup.char.body.head = "blue";

而這句寫入其實我們只需要2個字串就可以找到:
head 和blue.
這裡我沒想到什麼好方法,
所以就直接switch處理當找class的程序,再把"blue"寫進去。

之後再走一次上面把這個更新資料畫出來。

基本上整個結構就是這樣:
通過empty的GameObject建立骨架和動畫系統,並作為folder使用。
把部份打包成prefab並放置在Resource之中當要用到才load出來使用。
--------------------------------------------------------------------------------------------------------------
如果有空白(如馬尾等可以不要的東西怎做?)
制作一個"none"的empty作為部件就可以,當成有一樣地做也沒大問題。

如果有部件的特殊動畫可以怎做?
這個沒實現過,但概念上的做法是,通過UNITY是吃名字的Animator,把Prefab放進Char中設好了再刪除,你會發現動畫會黃了.(找不到部件)。但只要把部件加回去,理論上好像是可以找到的。
如果這個方法不行,則只有以增加一個empty作為folder的方式制作了。

至於deform/frame base... ..
目前想不通...

除了造結構還有什麼想法
1:做一個滿裝的再刪掉不要的...(會爆RAM.)
2:直接修改sprite render / texture (限2D 和 限外形)
-----------------------------------------------------------------------------------------

大概就是這樣子差不多的了。
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2940655
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

留言共 5 篇留言

健一
了解了 我最主要的問題是在動畫
看了一下 樓主做動畫應該是在各別去調整每個影格的位置嗎

主要是我自己做 張數少(動作跳的快)
但是會發生頭部動畫平滑的問題
如 第一格 頭在(0,0)位置 我希望在第五格 頭直接跳到(0,1)位置
但是unity會自動幫我做平滑 我把它平滑效果改掉(預覽是OK) 但執行還是一樣平滑效果..

不知道這樣解釋能不能聽得懂XD

08-24 01:45

Kaye
Anmation 中有個叫Curves的東西.
把需要處理的Keyframe右鍵改成Broken。
之後再拉一下handler令到圖改變成stepped。

08-24 02:00

健一
再拉一下handler令到圖改變成stepped。

應該是我少了這步驟

08-24 11:08

stormcorn
可以讓我轉貼至UNITY公會嗎:)?

08-24 12:34

Kaye
可以呀,可是這篇只是個人小制作,只是個人作法,不一定高效。08-24 16:18
路過的(CEAlbert)
感謝分享(_ _)

08-25 14:36

我要留言提醒:您尚未登入,請先登入再留言

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

前一篇:<<Dyna... 後一篇:Paradise Wor...

追蹤私訊切換新版閱覽

作品資料夾

ilove487  
【讀墨】2023年台灣大眾小說人氣票選ーー《致一百光年外的你》名列候補!!看更多我要大聲說26分前


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

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