發表文章

目前顯示的是 3月, 2018的文章
Related Posts Plugin for WordPress, Blogger...

5-25 Using Weapon Grip Position Based On Individual

圖片
本章要來修改武器設定中的Grip Tranform功能,大家還記得在以前的章節中,我們是將Grip Tranform綁定在Weapon的Scriptable Object上。但因為目前遊戲的武器系統要朝向讓每個敵人都可以撿起不同的武器,同理玩家也可以使用所有敵人手中的武器。此時,便產生原本給龐大敵人使用的武器,拿到玩家手中也變得非常龐大。 握住武器的方向,位置也都與玩家角色有偏差。這是因為該Grip Tranform是以龐大敵人角色來設計的,而非以玩家角色來設計。本章就要將Grip Tranform改到每個角色的Weapon System上,如此不同的武器給不同人使用時,便能套用正確的Grip Tranform。 如有人對Grip Position的設計不了解,可先參考以前的文章唷! 2-25 Introducing Scriptable Objects https://rpgcorecombat.blogspot.tw/2017/12/2-25-introducing-scriptable-objects.html 首先, 如下圖為原本的Weapon Config中,其Grip Tranform設定是給Berserker使用的,玩家套用上去當然會產生上述的滑稽現象。 第一步,我們必須確保武器套用角色的Grip Transform時,武器的方向跟大小都必須正確,所以3D模型必須要統一規格。如下圖這兩把劍的Rotation雖設為0但方向卻不一樣,由於我有很多素材都是從Asset Store下載的,這種問題特別多。 所以我想到一個快速的解決方法,不需要使用3D建模工具調整模型。首先我們在場景中建立一個Empty GameObject。 然後把原本的物件Longsword放進去,並將原本的Empty GameObject也取名為Long Sword。 將Long Sword的Position,Rotation都設為0,Scale設為1。 然後大家會發現劍的位置並不對,這時就要請大家調整Longsword,也就是劍的主體。 將Longsword調整到可以與另外一把劍重合,藉此來統一規格。 接著,原本的Longsword的Prefab物件就將他刪掉吧。 大家會發現原本場景中的Longsword

5-24 Automatically Put On Equipment

圖片
本章要來製作玩家碰到Weapon Pickup Point之後,不但要自動穿上裝備,背包系統內的裝備欄也必須對應到新裝備,而舊裝備必須自動放回背包內。如果背包已經滿了,則不能撿起裝備。 上一章已經教大家製作自動穿上Weapon Pickup Point的裝備的方法了。 5-23 Throw Out Weapon Pickup Point When Enemy Died https://rpgcorecombat.blogspot.tw/2018/03/5-23-throw-out-weapon-pickup-point-when.html 首先修改Slot.cs內的StoreItem方法,多增加一個回傳值ItemUI,後面會用到。 接著在InventorySystem.cs中再新增一個方法WearingEquipment,透過指定ID讓玩家穿上裝備。先用GetItemByID取得Equipment物件,接著從EquipmentSlotList中找出符合EquipmentType的Slot。比方說這個Equipment的類型為MainHand,則找出專門放置MainHand的EquipmentSlot。 若EquipmentSlot的ChildCound大於0,代表裝備欄內已經有裝備了,呼叫TakeOffAndWearNewEquipment方法。若裝備欄沒有裝備,呼叫StoreItem方法便能直接放置裝備。 接著說明TakeOffAndWearNewEquipment方法,先將新的裝備放到knapsackSlotList,如果放不進去代表背包滿了,回傳false。如未滿,則呼叫裝備欄的ExchangeItem方法與背包內的新裝備進行交換。 一開始不是有修改Slot.cs的StoreItem方法嗎?讓他回傳ItemUI,這是因為這邊的ExchangeItem方法必須傳入ItemUI的關係,所以必須要取得放在背包內的新裝備的ItemUI。 然後,我們就可以在WeaponPickPoint.cs中使用InventorySystem的WearingEquipment方法,指定WeaponConfig的ID,玩家的裝備欄便能自動放置裝備了。 以下提供本次修改的完整程式碼: Slot.cs: using System.

5-23 Throw Out Weapon Pickup Point When Enemy Died

圖片
今天要來製作敵人死亡後會掉落武器的機制,玩家或者敵人經過武器以後,都可以將武器撿起來使用。首先,掉落在地圖上的武器的設計,在以前的文章已經有介紹過了,如有人不清楚請先參考這篇文章: 4-3 Weapon Pickup Points https://rpgcorecombat.blogspot.tw/2018/01/4-3-weapon-pickup-points.html 先跟大家解釋一下本次的Weapon Pickup Points有什麼更動,原本的設計使用Trigger,而新的設計要改用普通的Collider,以及RigidBody。這是因為我希望敵人死後,武器會從身體『噴出來』,亦即需要受重力影響,且武器會停留在地面。 若仍用Trigger設計,武器受重力影響後會穿越地面一直往下墜落,所以新的Weapon Pickup Points的Rigidbody設定如下。 接著再來撰寫新的程式碼,首先修改WeaponPickupPoint.cs,增加OnCollisionEnter的方法偵測碰撞,並確認碰撞體擁有WeaponSystem的Component。因為敵人跟玩家都共用WeaponSystem,如此便能替換敵人或者玩家手中的武器了。 再來是Weapon.cs需要增加一個屬性,pickupPointPrefab,由於我的遊戲設定是敵人死後,會噴出他手中的武器,所以Weapon Pickup Points的Prefab物件便放在Weapon設定中吧。敵人藉由Weapon.cs決定他手中的武器是什麼,亦藉由Weapon.cs決定他噴出的武器是什麼。 然後,在WeaponSystem.cs增加方法ThrowOutWeaponPickupPoint,從Weapon設定中取得Prefab物件,並用Instantiate產生出來。然後,使用Rigidbody的AddForce方法,讓武器向上然後偏左一點噴出來。偏左一點,是為了避免武器的Collider碰到死掉的敵人,保險一點的話當然是加個檢查最好。 以下提供本次修改後的完整程式碼。 WeaponPickupPoint.cs: using System.Collections; using System.Collections.Generic; us

5-22 Terrain Performance Optimization And Area Light

圖片
今天想再來跟大家分享Terrain的優化,Terrain在行動平台上真的頗佔效能,尤其是 Tree、Grass這些東西,雖然建立場景的時候方便很多,但方便性帶來的犧牲就是Draw Call超高。 其中一個建議是Terrain只用來建立地形,諸如山脈、峽谷、平原這些高低起伏的地形,如果要放樹的話不要使用Terrain的Tree Tool,直接放3D模型上去。草的話更佔效能,所以就請大家斟酌使用。 我想應該還是有人希望用Terrain,真的方便很多,所以另一個建議是可以使用我接下來介紹的一些參數設定,多少對降低Draw Call有點幫助。 如果有人不太清楚Draw Call是什麼的話,可以先參考以前的文章唷! 5-1 Optimization In Mobile Platform https://rpgcorecombat.blogspot.tw/2018/01/5-1-optimization-in-mobile-platform.html 好的!接下來先針對Grass進行優化。首先請點選自己場景的Terrain,然後按下設定按鈕中,會看見其中有Resolution的設定,然後來看看Detail Resolution跟Detail Resolution Per Patch這兩個數值。 根據官方API文件說明: Detail Resolution Resolution of the map that determines the separate patches of details/grass. Higher resolution gives smaller and more detailed patches. Detail Resolution Per Patch Length/width of the square of patches renderered with a single draw call. 所以,Detail Resolution的數值越高,繪製在地圖上的細節會越精細。不過要注意!調低數值會導致原本設置的草消失,再調高也變不回來唷!所以建議不要隨意調整這個設定值。 Detail Resolution Per Patch是指Batches的時候,需要繪製多少個區塊的草地。根據網路