使用Unity 粒子系統實現 2D 人物足跡效果

2021-01-10 騰訊網

前言

項目中使用的基本角色控制腳本是由 Unity Learn 中的官方教程 John Lemon's Haunted Jaunt(很不錯的教程)中的示例控制腳本改進而來。其基本思路是根據輸入計算一個 2 維向量lookDirection作為角色的「面向」,並根據這一向量移動剛體以及播放動畫。

它能夠保證對於任意角度,角色的移動速度都保持一致,並且這一向量對於腳印效果的實現很重要。

如有疑問可以查閱底部的教程連結或直接下載腳本。

部分腳本參考

基本思路:

首先來梳理一下想要的人物足跡的特性:

在人物移動時生成,並在一段特定時間後消失,最好有個淡出效果

足跡會沿人物移動軌跡左右交互排列

足跡的指向與人物移動方向相同,也就是說在人物轉向時,足跡也應旋轉對應的角度

第一反應:建一個腳印的 prefab,利用動畫器實現淡出效果,用腳本實現腳印的生成、銷毀、鏡像與旋轉。之後深入一想腳本大概要怎麼寫,感覺頭大的不行,又想到了 Hierarchy 裡面被 FootStep12345678 塞得滿滿當當的壯麗場面..還是換個方法吧

轉念一想:unity 的粒子系統似乎可以滿足所有特性:生成淡出銷毀全自動,跟隨人物也是基本操作,比較存疑的就是用腳本控制粒子的鏡像與旋轉。

之後當然就是搜索有沒有現成的輪子可以用,別說,還真在 unity forums 找到了一個官方比較完美的粒子系統足跡效果。唯一的問題就是它是一個 3D 示例,而我的遊戲則是純 2D。

所以現在的問題就是如何將這一方案轉換在 2D 中實現。

先來分析一下它的實現腳本:

用來生成腳印粒子的核心代碼是Update()中的這一部分:

其中比較重要的有兩個量:transform.right與transform.rotation

transform.right:物體X軸的方向,垂直於物體的面向。腳印需要在此方向上左右偏移。transform.rotation.eulerAngles.y:物體Y軸方向上的的旋轉角度,在這個示例中也是它的移動方向旋轉的角度。

俯視角的 2D 遊戲中並不經常直接操作角色對象的旋轉,所以這兩個量在腳本中沒有意義,需要找一個與它們類似的變量來替代它們的功能。

而在之前的角色控制腳本中,恰恰有一個很重要的二維向量:lookDirection,從某種意義上它就是角色的「面向」,能夠起到與 3D 中的transform.front類似的效果。

果斷使用lookDirection向量進行等效替換:

transform.right與transform.front垂直,也就是說我們需要一個與lookDirection垂直的向量。

而兩向量垂直怎麼算來著?X1X2+Y1Y2 = 0嘛。

transform.right * gap * dir 等效替換為 new Vector3(lookDirection.y * gap * dir, -lookDirection.x * gap * dir, -5)

transform.rotation.eulerAngles.y為物體面向旋轉的角度,那麼直接計算lookDirection與Vector2(0, 1)向量的夾角就完事了。

transform.rotation.eulerAngles.y 等效替換為 Vector2.Angle(new Vector2(0, 1), lookDirection)

OK!腳本的基本思路完成了,之後就是設置粒子系統了。

創建足跡系統使用的腳印材質:

創建一個默認材質,然後將它的shader更改為Legacy Shaders / Particles / Alpha Blended,將腳印的 sprite 拖拽到選框中。重命名為footPrint。

設置粒子系統

在 Player 對象下新建一個粒子系統,並命名為FootStep

如圖設置粒子系統:

最後,根據情況修改角色控制腳本並調整參數

之後就是快樂的測試 -> 改代碼 -> 測試 -> 改代碼循環往復...

最終效果:

第一次寫教程,囉裡囉嗦寫得不好還請見諒哈

連結:

官方提供的使用 Ringbuffer 實現的3D 腳印效果示例:

https://pan.baidu.com/s/1g9s9GIiILRZpMVeQ640_5Q

提取碼:e8g6

項目中使用的 Charactor Controller 腳本(項目本身太大了就不放了):

https://pan.baidu.com/s/1a6A46aG1fD2ub3d__P4Nvg

提取碼:rqn1

參考:

https://learn.unity.com/tutorial/wan-jia-jiao-se-di-2-bu-fen?projectId=5dfa9a5dedbc2a26d1077ca8#5e391a9dedbc2a00227146d5

John Lemon's Haunted Jaunt 玩家角色 第二部分

https://forum.unity.com/threads/particle-system-ringbuffer-demo.740207/

Particle System Ringbuffer demo

相關焦點

  • Unity技術分享(100)| Texture2DArray、粒子系統的性能開銷……
    UWA QQUWA 問答社區:answer.uwa4d.com粒子系統Q:請問粒子系統的消耗如何區分呢?哪部分是在CPU哪部分在GPU呢?一個空粒子(禁用所有模塊,包括Render)會有消耗嗎?如果有消耗,會體現在哪部分呢?
  • 使用unity製作RPG遊戲3——2D精靈
    前面介紹了使用Tiled製作地圖相關連結http://baijiahao.baidu.com/builder/preview/s?context=%7B%22nid%22%3A%22news_9564882242542237691%22%2C%22sourceFrom%22%3A%22bjh%22%2C%22url_data%22%3A%22bjhauthor%22%7D下面需要利用Tiled2Unity把01地圖導入unity下載Tiled2Unity,在根目錄下打開可執行文件進入unity。
  • 2021新年匯總:Unity項目原型快速開發資源,看這一篇就夠
    2D Game Kit : https://assetstore.unity.com/packages/essentials/tutorial-projects/2d-game-kit-107098 Lost Crypt – 2D Sample Project : https://assetstore.unity.com
  • 巧用Unity 2D功能:只需六步開發簡單的2D UFO遊戲
    Unity中的2D功能讓開發此類遊戲更加的便捷,這篇教程將教大家使用Unity 2D功能製作一個非常簡單的UFO遊戲,整個過程只需要6個步驟,適合Unity初學者以及對Unity的2D功能不甚熟悉的開發者們,希望Unity能讓你初嘗遊戲開發的樂趣,為以後的開發之路奠定基礎,你準備好完成這款簡單的2D遊戲了嗎?
  • unity遊戲製作初始人物控制代碼
    大家好,今天小編帶大家學習一哈unity遊戲製作中初始人物控制代碼。1.我們知道遊戲中,選中人物,在人物未開始運動前,往往會有一個初始的動作,好的,我們這節課通過unity中相關代碼和基礎設置來實現這一效果。
  • Unity2018新功能搶鮮 | 粒子系統改進
    洪流學堂,讓你學Unity快人幾步Unity2018.1中對粒子系統進行了重大改進,包括功能、性能很多方面,快來看看吧!GPU網格實例化粒子系統現在支持GPU實例化來渲染網格。粒子系統使用Procedural Instancing,可以在此處詳細解釋:https://docs.unity3d.com/Manual/GPUInstancing.html實例化支持已添加到「Particle Standard Shaders」中,並將在所有新內容中默認啟用。舊版內容升級到Unity 2018.1後,可以使用Renderer模塊中的複選框啟用GPU實例化。
  • Unity粒子系統小技巧X1
    幾個方法都是用unity粒子系統裡面的Velocity over lifetime(不知道這是什麼的去學基礎課)第一個方法我們看到這三個軸向都是用這個形狀的雙曲線首先A部分,這是給粒子一個速度,讓它跑出去,然後停下來B部分,是給一個和一開始相反的速度讓粒子回去它出來的地方C部分,是讓粒子在外面停留
  • 簡化AR體驗創作,Unity MARS Query系統程序化生成場景的原理
    整個模型與實體組件系統(ECS)的概念相似,特徵相當於一個組件。  數據使用  每個代理都帶有稱作Exclusivity(排他性)的屬性,確定了代理使用匹配數據的方式,並限制了查詢指令訪問已經在使用的數據,確保每一條內容能匹配上相應的現實數據。
  • 遊戲粒子碰撞魔法特效Unity遊戲素材資源
    人人素材社區-最專業的CG藝術交流網站小夥伴們玩遊戲時遇到打鬥的畫面會不會感覺很爽,法術碰撞會產生格外好看的效果,這些特效是怎麼做出來的呢,今天為就大家介紹一款遊戲粒子碰撞的魔法特效素材,一起來了解一下。
  • Unity3D 尋路系統
    一、尋路方式二、實現尋路方法確定尋路者烘培尋路路面程序實現尋路算法1、實現尋路步驟將場景中不動的物體勾選
  • 28組炫酷多彩遊戲粒子碰撞爆炸特效Unity遊戲素材資源
    人人素材社區-最專業的CG藝術交流網站在遊戲中我們是不是總會看見爆炸的場面感覺既炫酷又刺激呢  這種效果又是怎麼形成的呢今天為大家帶來就粒子碰撞爆炸特效快讓我們看看這種特效究竟是怎麼回事吧本遊戲資料是個關於28組炫酷多彩遊戲粒子碰撞爆炸特效Unity遊戲素材資源,大小:1MB ,
  • Unity 實用技巧 - 物理系統初識
    兩個引擎的主要概念是相同的,但是它們是使用不同的組件實現的。例如,Rigidbody和Rigidbody2D。物理系統主要由以下幾部分組成:Rigidbody(剛體)、Collider(碰撞器)、Triggers(觸發器) 、Joint(關節)、Character Controller(角色控制器)。
  • unity業餘愛好者說一下
    unity業餘愛好者說一下,這幾天傳的關於《太吾繪卷》代碼的事幾乎都是無中生有的事...一群用.net和vs做工程的人談論第三方引擎做的遊戲...真是雞同鴨講。太吾繪卷現在針對幾個常見誤會說一下1.只有一個main (x)unity的腳本都是依附於各個精靈的,沒有main,只有update2.沒有注釋(x)你反編譯出來的代碼有注釋
  • unity2018粒子系統全息講解_坑深慎入(一)
    SimulationSpace(模擬空間):就是使用的空間坐標。粒子的運動所使用的空間坐標。         Local(自身): 使用自身粒子系統的遊戲物體的坐標。         World(世界):使用世界坐標,就是場景坐標。         Custom(制定):使用另一個物體的坐標。
  • 如何製造一個簡單的2D遊戲?
    相對主流的兩款遊戲引擎分別是Unity和Unreal Engine4(UE4),二者各有利弊,比如Unity的3D渲染效果不如UE4,但Unity有許多插件可以使用,開發效率會更高。由於本文介紹的是2D遊戲的開發,所以我個人覺得Unity是一個更優的選擇(其實是因為我們學校工作室考核要求用Unity)。
  • Unity開發技巧:使用腳本修改粒子
    舉個例子,例如,部分系統類。比方說,你有一個粒子系統。您需要使用腳本修改粒子系統的形狀半徑。在快速瀏覽一下Unity  ParticleSystem的文檔之後,您可以假設您可以使用分區ParticleSystem.shape.radius來改變粒子系統的半徑。然而,當我們試圖這樣做的時候,問題就出現了。Unity給了我們一個錯誤,告訴我們這個部分。半徑是只讀的。
  • Unity粒子遇上著色器,引爆視覺特效
    下面來分析粒子系統驅動的數據,Michał使用粒子的尺寸(Size)和顏色(Color)來控制一些著色器參數。如下圖所示:  最後提交大賽評審的版本,事實已經禁用了粒子渲染,因為這些粒子只是為了將數據傳遞給著色器,不會執行任何其它操作。 下面的操作視頻打開了粒子渲染,幫助大家理解特定參數的調整所引起的變化: 那這些粒子到底是如何驅動著色器的呢?
  • 學前班遊戲開發入門6:爆炸效果與Unity3D粒子系統入門
    上一期我們說到了怎樣發射子彈,那麼接下來當然是要說到爆炸效果了。通常爆炸效果由貼圖和粒子系統組成,不過貼圖顯然不是程式設計師的工作,所以我們以一個簡單的純粒子系統的實現來先入入門是很有必要的。不管是 u3d 還是別的什麼軟體,粒子系統都是異常複雜的。
  • Unity Ragdoll 實現死亡效果 心得+坑點總結
    第一幀蒙皮拉伸,撕裂死亡後蒙皮拉伸,撕裂死亡後布娃娃不生效 正文回到頂部效果展示正如其名,Ragdoll可以讓人物模型實現像布娃娃一樣物理效果root節點應在這個位置,不熟悉朋友有可能將盆骨附近Pelvis 與 胸部附近Middle Spine的兩個Collider互換位置,或者重疊,這將導致整個人物的抽搐,蒙皮拉伸
  • Unity官方示例:在ARCore和ARKit中實現多人遊戲
    Focus Square便是這個指示符的一個實現。移植這個示例到ARInterface的過程比較直接,因為它不會涉及太多平臺特定代碼,除了HitTest。所以我們決定對生成平面遊戲對象使用光線投射取代HitTest。這將給那個平面實現HitTest的效果,而且還能在編輯器上使用。