亚洲欧美日本A∨在线观看_黑人video粗暴亚裔_JAPANESE日本丰满少妇_九九精品91久久久久久再现_国产MD视频一区二区三区

首頁 > 聚焦 >

Inventory背包學(xué)習(xí)筆記-環(huán)球視訊

發(fā)表時(shí)間:2023-06-26 18:02:56 來源:嗶哩嗶哩

Inventory背包學(xué)習(xí)


(資料圖片)

制作背包基本UI

基礎(chǔ)的panel,container

SlotHolder【包含ItemSlot <- amount】保存為prefab

創(chuàng)建在地圖上的物品ItemOnWorld,裝備在身上的物品ItemEquipment

ItemData_SO,用于保存item數(shù)據(jù)【name,icon,stackable可堆疊,描述等等信息】

ItemType(Useable,Weapon,Armor等等)

name

icon

prefab_EQ

ItemPickUp【碰撞到玩家之后銷毀自己,給玩家加入背包】

調(diào)用InventoryData_SO中的AddItem給某個(gè)背包添加物品,RefreshUI();

刪除本體

Equipment

ChangetWeapon

EquipWeapon

UnEquipWeapon

需要的話可以修改attackData

InventoryManger

需要獲取的變量:

InventoryData

Container

UI Panel

ItemToolTip

Canvas(inventoryCanvas , dragCanvas)

DragData【自定義類,包含originalHolder,originalParent】

Fnc

獲取模板數(shù)據(jù)

保存、讀取數(shù)據(jù)

開關(guān)背包的bool

Check DragItem is In SlotArea 檢查拖拽物品是否在某一個(gè)Slot范圍內(nèi)

創(chuàng)建背包的數(shù)據(jù)庫Inventory Data【每一個(gè)背包都對應(yīng)一個(gè)inventoryData】

InventoryItem【這是背包里面的物品類型,儲存itemData和amount】

Listitems; 列表中的每一個(gè)元素都對應(yīng)背包中對應(yīng)序號的物品,交換之后會交換列表中的位置

AddItem(ItemData_SO , Int)

可堆疊

在列表中尋找物品,有則堆疊上去

不可堆疊、沒有找到相同物品

在第一個(gè)空位置添加相應(yīng)物品

InventoryUI 背包顯示物品對應(yīng)圖標(biāo)

ContainerUI 保存該背包下的所有SlotHolder

RefreshUI(),更新每一個(gè)itemUI的index ,index有值之后就可以UpdateItem了

SlotHolder

單元格類型SlotType

獲取自身子類itemUI

UpdateItem,將自身單元格的item更新到itemUI上

switch更換對應(yīng)類型的數(shù)據(jù)庫

進(jìn)行對應(yīng)的操作,比如說裝備武器

更新UI的顯示

ItemUI(包含Image <- text)具體每個(gè)物體UI上,控制image,text顯示

SetUpItemUI

如果當(dāng)前格子有物品,則更新icon、amount、SetAction(true);

如果沒有物品,SetActive(false);

InventoryData_SO InventoryData ,int index 保存這個(gè)地方對應(yīng)哪一個(gè)數(shù)據(jù)庫的哪一個(gè)index

創(chuàng)建其他Panel,按照上面的方式,保存itemUI成為Prefab,設(shè)置好SlotType,創(chuàng)建對應(yīng)的數(shù)據(jù)庫

DragItem 實(shí)現(xiàn)拖拽物品(實(shí)際上是拖拽的ItemUI),添加到可以拖拽的背包格子(ItemUI)上,命名空間EventSystems

接口:IBeginDragHandler, IDragHandler ,IEndDragHandler,拖拽開始、拖拽中、拖拽結(jié)束

/cn/current/ScriptReference/ 接口的代碼手冊

PointerEventData eventData(position鼠標(biāo)位置,pointerEnter鼠標(biāo)進(jìn)入某個(gè)區(qū)域(triggerEnter))

OnIBeginDragHandler

記錄原始信息

設(shè)置父級為DragCanvas

OnIDragHandler(自帶Update)

跟隨鼠標(biāo)位置移動

OnIEndDragHandler

放下物品,交換數(shù)據(jù)

() 【具有給定ID的指針是否位于EventSystem對象上】

在InventoryManager里面創(chuàng)建CheckInInventoryUI(vec3)檢測拖拽物品是否在某一個(gè)slot范圍內(nèi)

循環(huán)若干個(gè)containerUI需要檢測每一個(gè)該檢測的)

(方形范圍 , position)) 判斷position是否在方格范圍內(nèi)

檢查鼠標(biāo)指向的位置是否有SlotHolder組件 ,設(shè)置為targetHolder。如果image顯示出來了,獲取不到SlotHolder,則要去image的父級獲取

交換物品,判斷targetHolder是否為空,是否不是原始Holder,需要判斷targetHolder的slotType能否進(jìn)行交換,調(diào)用SwapItem()

交換完畢后更新currentHolder,targetHolder

修改父級回到原始

修改RectTransform回到原始設(shè)置

offSetMax錨點(diǎn)右上偏移

offSetMin錨點(diǎn)左下偏移

[RequireComponent(typeof(ItemUI))]在拖拽物品上自動添加ItemUI

添加一個(gè)最高層的DragCanvas,在拖拽時(shí)加入此Canvas,保證拖拽不會被擋道其他UI后面,在InventoryManager里面保存

InventoryManger中創(chuàng)建一個(gè)類DragData

保存原始的Holder,原始的Parent(RectTransform)

用來臨時(shí)儲存拖拽信息,使用的時(shí)候new一個(gè)新值

SwapItem() 【修改數(shù)據(jù)列表的排列】

targetItem,tempItem【指向當(dāng)前item,如果交換過去則清空】

判斷是否堆疊,可堆疊則堆疊,否則直接交換

Useable Item可使用物品(雙擊使用)

創(chuàng)建對應(yīng)的數(shù)據(jù),物品

在SlotHolder中,利用 IPointerClickHandler 接口實(shí)現(xiàn)雙擊使用物品

代碼手冊:/cn/current/ScriptReference/

判斷點(diǎn)擊次數(shù)為偶數(shù),避免多次點(diǎn)擊不為2會失效

UseItem(),判斷是否為空,是否可使用,數(shù)量是否大于0

鏈接到Character組件實(shí)現(xiàn)改變屬性

開關(guān)Panel,InventoryManager里面設(shè)置一個(gè)bool,一個(gè)func,用于判定打開背包時(shí)人物不可移動

ActionButton

public KeyCode actionKey,進(jìn)行逐一設(shè)置

背包中實(shí)現(xiàn)實(shí)時(shí)投影玩家

攝像機(jī)輸出到Render Texture

UI創(chuàng)建Raw Image接收這個(gè)Render Texture即可

ItemToolTip物品信息顯示欄

創(chuàng)建UI,主要用到Content Size Fitter 和 Layout Group

腳本ItemToolTip

SetUpToolTip(ItemData_SO itemData),設(shè)置圖標(biāo)、名稱、描述等,配合UI顯示

Update中跟隨鼠標(biāo)的位置,并且根據(jù)條件判斷應(yīng)該在鼠標(biāo)的哪個(gè)方向顯示,獲取矩形四個(gè)角頂點(diǎn)位置(世界坐標(biāo))

12

03

在SlotHolder中 添加 IPointerEnterHandler ,IPointerExitHandler兩個(gè)接口

鼠標(biāo)進(jìn)入時(shí)如果有物品,則更新ToolTip并且顯示

離開時(shí)、SlotHolder(背包)關(guān)閉時(shí)取消ToolTip的顯示

Loot Item 掉落物品

LootSpawner腳本

創(chuàng)建一個(gè)序列化的類,包含item以及一個(gè)權(quán)重(設(shè)置掉落概率)

SpwanLoot

獲取一個(gè)隨機(jī)值,從lootItems數(shù)組中遍歷,尋找符合概率的物品,如果掉落之后break則只掉落一個(gè)物品

背包數(shù)據(jù)的保存與讀取

調(diào)用SaveManager,在背包內(nèi)物品有所更改、或是別的條件下進(jìn)行保存數(shù)據(jù)

DragPanel面板的拖拽,調(diào)整Hierarchy排序方式改變渲染層級

拖動時(shí),為了避免電腦分辨率和Canvas分辨率不同,所以拖動要除以Canvas的分辨率

+= / ;

IPointerDownHandler

渲染層級: / Get...

滾輪選擇ActionBar物品【實(shí)現(xiàn)時(shí)需要對前文的設(shè)置進(jìn)行修改以達(dá)到最好的效果,屬于兩種截然不同的背包方法】

InventoryManager 中 ("Mouse ScrollWheel")檢測滾輪輸入 上為正,下為負(fù)

在SlotHolder中添加index來進(jìn)行索引,添加選擇框的image

InventoryManager 中 添加選擇currentSelectHolder的函數(shù)

更新前取消選擇框iamge,更新后顯示選擇框image

選擇時(shí)裝備物品,如果是空欄則卸載物品

標(biāo)簽:

Copyright ©  2015-2022 太平洋產(chǎn)業(yè)網(wǎng)版權(quán)所有  備案號:豫ICP備2022016495號-17   聯(lián)系郵箱:93 96 74 66 9@qq.com