Unity3D+免費工具開發2D遊戲之三:創建人物動畫

原文地址: http://www.rocket5studios.com/tutorials/make-a-2d-game-with-unity3d-using-only-free-tools-part-3/


原版翻譯,轉載請註明出處:http://blog.csdn.net/ariel7321/article/details/7777157


本節中,我們將加入主角、掛鉤一些腳本、給梯子和繩索添加碰撞,最後主角可以在這個關卡里移動。

點擊這裏查看本節完成後的效果:點我!


製作主角的精靈圖集


如果你跟着我這個教程,你肯定會爲主角的移動而興奮,因此我們用TexturePacker先製作一個精靈圖集。


Download the source sprite .png’s ,解壓到項目中。如果你在第二節中已經做過了就跳過此步驟。

打開TexturePacker ,並將sprites/player目錄下的所有.png文件都拖到Sprites面板中。


Texture Settings / Layout:

  • Algorithm 設置成Basic。
  • Border Padding設置爲1.
  • Shape Padding設置爲1.
  • 不勾選Trim。

Texture Settings / Output:

  • 保留Data格式爲cocos2d。
  • 在Data File中,點擊...,將輸出保存到項目的Assets下(我保存在Assets/SpriteAtlases),保存爲“player”。
  • TexturePacker 自動給文件加了後綴.plist,但是Unity需要.xml文件,因此我們將.plist改爲.xml。
  • Texture File路徑應該也被設置成和Data File一樣的了。
如果你按照我上面的步驟去做,TexturePacker的設置就如下圖所示:


如果你點擊Publish,然後切換到unity你就會在項目視圖裏看到SpriteAtlases 文件夾,在此文件夾下看到精靈貼圖和精靈數據文件。

我們需要在Unity裏做些修改讓它看起來正確。
  • 在項目視圖裏選擇player.png,在Inspector 中將Filter Mode改爲Point。
  • 點擊 Override for Web,將Format 設置成Truecolor ,然後點擊Apply。

製作主角精靈


我們用Orthello 2d將主角精靈圖集變爲動畫精靈。

精靈容器:
  • 在unity的項目視圖,點開orthello:Orthello –> Objects –> Sprites –> SpriteAtlas,然後將 SpriteAtlas-Cocos2D拖到Hierarchy中。
  • 在Hierarchy窗口,點開OT->Containers,你會發現出現了一個新的Container,名字類似Container (id=-6840)“,這個Container將會包容我們關卡需要的所有的精靈,所有我們可以命名它爲“player”。
  • 將“player.png”拖放到“OTSprite Atlas Cocos 2D” 腳本的Texture位置。
  • 將“player.xml”拖放到“OTSprite Atlas Cocos 2D” 腳本的Atlas Data File 位置。

建立主角動畫:
  • Animation 對象拖到Hierarchy中 Orthello –> Objects –> Sprites ,這將會在OT –> Animations下添加一個新的對象,名字類似 “Animation (id=-4320)“,將其重新命名爲“player anims”。
  • 點選剛創立的動畫對象,將設置修改爲下圖所示的。
  • Framesets下,將Size設置爲9.
  • 爲了填充Container區域,將 OT –> Containers 下的player拖放進去。



製作主角精靈

  • 然後將Orthello –> Objects –> Sprites 下的AnimatingSprite 拖放到Hierarchy中,這會給場景添加一個新的對象,名字類似“Animating Sprite (id=-23050)“。將名字改爲“player“。
  • 將“player anims”拖放到“player”的Animation位置。 Sprite Container位置會被自動填上“player”容器對象。如果沒有,你可以自己將“player”容器對象拖放到此位置。
  • 此時你應該看到player精靈在場景中,如果你播放,你會看到player的動畫在一直播放。但我們不希望動畫在一開始就播放,所以將 Play On Start的勾選去掉。

給主角添加碰撞檢測


爲了使主角能正確的和梯子繩子進行碰撞,我們需要做以下設置:

  • 選中player,勾選“OTAnimating Sprite”下的Collidable,這會給對象自動添加一個Rigidbody。
  • 點開Physics旁的下拉菜單,選擇Custom。
  • 在Transform中,將Scale Z設爲1.
  • 將Depth改爲-1.
  • 在Box Collider中,將Center Y改爲-0.1,Z改爲1. 將Size X改爲0.45, Y改爲0.6,Z改爲0.4.


如果你按照上面的步驟去做了,那麼你將得到下面圖示結果:



將Depth改爲-1以及將Box Colider的Z改爲1,這會使主角靠近攝像機一些,使碰撞器在Z軸的0位置。這樣做有兩個效果:首先可以保證主角始終在關卡背景的前面而不會被擋住,其次保證碰撞器在Z軸的0位置使之可以和梯子繩子進行碰撞。這聽起來玄乎,但是你看看下圖就明白是怎麼回事了:



設置射擊動畫


我們需要添加另外一個動畫,當我們按下開火鍵時,會有子彈從主角身上發出,並撞擊地面。


製作射擊動畫

  • 將Orthello –> Objects –> Sprites中的Aniamtion對象拖放到Hierachy中。這會在OT –> Animations下創建一個新的名字類似“Animation (id=-4320)“的對象,將其重命名爲“shoot anims”。
  • 點選“shoot anims”對象,將設置設成下圖所示。將OT –> Containers下的level容器拖放到Container 區域。



製作射擊精靈

  • 然後將Orthello –> Objects –> Sprites 下的AnimatingSprite 拖放到Hierarchy中,這會給場景添加一個新的對象,名字類似“Animating Sprite (id=-23050)“。將名字改爲“shoot“。
  • 將“shoot anims”拖放到“shoot”的Animation位置。 Sprite Container位置會被自動填上“level”容器對象。如果沒有,你可以自己將“level”容器對象拖放到此位置。
  • Transform Position X設置爲-1,這樣就會使其位置在主角精靈的左側。
  • 將深度Depth改爲-1,這樣它始終在關卡背景的前面。
  •  Frame Index設置爲18.
  • 此時你應該看到shoot精靈在場景中,如果你播放,你會看到shoot的動畫在一直播放。但我們不希望動畫在一開始就播放,所以將 Play On Start的勾選去掉。
  • 我們只希望在主角真的發射子彈時子彈纔出現,所以我們把 Mesh Render給勾掉,隱藏子彈動畫,直到我們用腳本來重新打開它。


給子彈精靈加個父節點


我們希望子彈精靈跟隨者主角,我們也希望能根據主角的面向來左右翻轉這個精靈。

  • 創建空對象 Object –> Create Empty。
  • 將其命名爲shoot parent”,並是Position在0、0、0位置。
  • 在Hierarchy中,將shoot精靈拖放到shoot parent上,使shoot成爲shoot parent的子節點對象。
  • 將shoot parent對象拖放到player精靈上,使之成爲player精靈的子節點對象。

如果你按照我的步驟,你的Hierarchy就跟下圖差不多。注意,爲了使結構更緊湊,我把所有level相關的對象都放到了一個名爲“LEVEL”的空對象下了。


注意:爲了使後面的腳本能正確的工作,player下的子節點對象的名字一定要和上圖中的一模一樣。


添加腳本


我們終於要添加腳本來使主角移動了。

  • Download the player scripts 下載腳本,解壓到你電腦硬盤中。
  • 將裏面的腳本拖放到項目的Asset文件夾裏。
  • 創建一個空遊戲對象Game Object –> Create Empty。
  • 將新對象命名爲“Scripts”。
  • xa.cs腳本文件拖放到Scripts對象上。
  • player.cs 和  playerAnims.cs腳本文件拖放到player對象上。
  • 確保主角站在一個磚上,這樣他不會掉下去。要記住,實際上是主角的Box Collider和其它物體碰撞,而不是可見主角精靈,所以要使主角的位置像0,0,-1(x,y無所謂,但是z一定要保持在-1)。

好了,如果你按照了以上所有步驟,那麼此時當你播放這個遊戲,你會發現主角能夠站在磚上而不會掉下去了。並且當你按鍵盤上的左右方向鍵時主角會跟着移動,而且還有動畫。

本教程並不解釋腳本如何工作的,但是我在腳本里做了註釋,希望能幫到你。如果你有任何的疑問,你可以在回覆中提問,也可以給我email。


給梯子加碰撞


創建一個梯子碰撞體

  • 創建一個Cube,GameObject –> Create Other –> Cube。
  • 將Cube命名爲“Ladder”。
  • 打開Tag Manager,Edit –> Project Settings –> Tags。
  • 創建“Ladder”和“Rope”兩個Tag。
  • 讓我們再創建一個層Layer “NoDraw”。
  • 現在將Ladder對象的Tag改爲Ladder,Layer改爲NoDraw。

在遊戲視圖中隱藏梯子碰撞體

  • 點擊Main Camera。
  • 在Camera下面,打開Culling Mask下拉菜單,點掉NoDraw。這樣在NoDraw層的物體都不會在遊戲視圖裏看到了。


調整梯子碰撞體的大小和位置


梯子碰撞體需要比可見的梯子大一個單元,這就是說,如果你的梯子有4塊拼圖片高,那麼碰撞體得有5個高。

  • 假設你的梯子有4個單位高:選擇Ladder碰撞體,將Scale Y改爲5.
  • 使用Vertex Snap將Ladder與梯子的底部拐角對齊。
  • 你可以複製這個Ladder,然後與其他梯子對齊。

你的Ladder應該跟下圖所示一樣:



現在你按Play,當主角碰到梯子時,可以上下爬梯子了,可以從梯子的上下兩端走出,如果你從梯子中間走出去,也可以從梯子的中間掉下來。


給繩子加碰撞


創建一個繩子碰撞體

  • 創建一個Cube,GameObject –> Create Other –> Cube。
  • 將Cube命名爲“Rope”。
  • 現在將Rope對象的Tag改爲Rope,Layer改爲NoDraw。


調整繩子碰撞體的大小和位置


繩子碰撞體需要比可見的繩子大一個單元,這就是說,如果你的繩子有4塊拼圖片長,那麼碰撞體得有5個長。

  • 假設你的繩子有4個單位長:選擇Rope碰撞體,將Scale X改爲5.
  • 使用Vertex Snap將Rope與繩子的底部拐角對齊。
  • 你可以複製這個Rope,然後與其他子對齊。

你的Rope應該跟下圖所示一樣:


現在你按Play,當主角碰到繩子時,可以左右爬繩子了,可以從繩子的左右兩端走出,如果你從繩子中間走出去,也可以從繩子的中間掉下來。


結尾


現在已經完成了主角的所有移動動作了:跑、爬梯子和繩子。下一講我們將加入計分系統、打破磚塊和撿起物體。


你可以下載本項目 download the project up to this point,也可以試玩本項目 play the web version of the project here.


如果你喜歡,請回復這篇博客,並關注我的 Twitter和 Facebook。你的支持會幫助這個教程的持續進行。這個博客是iDevBlogADay的一部分,這裏面收集了一系列程序員開發的經驗。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章