發表文章

目前顯示的是有「Unity 武器系統」標籤的文章
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-20 Change Weapon Config When Equipping Weapon

圖片
前面我們花了大量的篇幅製作了背包系統,現在就要來將背包系統跟我們遊戲中的武器系統進行整合,首先,我的背包系統換了一個新的介面,所以不要覺得奇怪為什麼變漂亮了XDD我是從這邊買的,如果大家也喜歡的話歡迎購買唷~我沒有在廣告,這介面也不是我做的。 https://assetstore.unity.com/packages/2d/gui/arrow-mobile-ui-for-ugui-64369 這次的修改沒有很複雜,主要在InventorySystem.cs的WearingEquipment方法中,呼叫WeaponSystem用來更換武器的方法。所以,重點在於要將JSON資訊跟Weapon綁定在一起。如果不懂我是怎麼在WeaponSystem更換武器的話,可以先看看以前的文章: 4-3 Weapon Pickup Points https://rpgcorecombat.blogspot.tw/2018/01/4-3-weapon-pickup-points.html 首先,我先將本次要測試更換的Simple Bow跟Orc Sword放到Resources資料夾。 然後修改JSON格式,多新增一個欄位EquipmentAssetsPath。 以下提供我目前完整的JSON格式: {"ConsumableEntityList":[ { "ID":1, "Name":"血量瓶", "ItemTypeString":"Consumable", "ItemQualityString":"Common", "Description":"+ 25 HP", "Capacity":10, "BuyPrice":10, "SellPrice":10, "Sprite":"Sprites/Items/hp...