最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

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

2023-06-26 18:12 作者:豬雞不是病句  | 我要投稿

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

  1. 制作背包基本UI

    1. 基礎(chǔ)的panel,container

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

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

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

      1. ItemType(Useable,Weapon,Armor等等)

      2. name

      3. icon

      4. prefab_EQ

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

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

      2. 刪除本體

    3. Equipment

      1. ChangetWeapon

      2. EquipWeapon

      3. UnEquipWeapon

      4. 需要的話可以修改attackData

  3. InventoryManger

    1. 需要獲取的變量:

      1. InventoryData

      2. Container

      3. UI Panel

      4. ItemToolTip

      5. Canvas(inventoryCanvas , dragCanvas)

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

    2. Fnc

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

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

      3. 開(kāi)關(guān)背包的bool

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

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

    1. InventoryItem【這是背包里面的物品類型,儲(chǔ)存itemData和amount】

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

    3. AddItem(ItemData_SO , Int)

      1. 可堆疊

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

      2. 不可堆疊、沒(méi)有找到相同物品

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

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

    1. ContainerUI 保存該背包下的所有SlotHolder

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

    2. SlotHolder

      1. 單元格類型SlotType

      2. 獲取自身子類itemUI

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

        1. switch更換對(duì)應(yīng)類型的數(shù)據(jù)庫(kù)

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

        2. itemUI.SetUpItemUI更新UI的顯示

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

      1. SetUpItemUI

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

        2. 如果沒(méi)有物品,SetActive(false);

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

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

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

    1. 接口:IBeginDragHandler, IDragHandler ,IEndDragHandler,拖拽開(kāi)始、拖拽中、拖拽結(jié)束

      1. https://docs.unity.cn/cn/current/ScriptReference/EventSystems.IBeginDragHandler.html 接口的代碼手冊(cè)

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

    2. OnIBeginDragHandler

      1. 記錄原始信息

      2. 設(shè)置父級(jí)為DragCanvas

    3. OnIDragHandler(自帶Update)

      1. 跟隨鼠標(biāo)位置移動(dòng)

    4. OnIEndDragHandler

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

      2. EventSystem.current.IsPointerOverGameObject() 【具有給定ID的指針是否位于EventSystem對(duì)象上】

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

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

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

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

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

      6. 交換完畢后更新currentHolder,targetHolder

      7. 修改父級(jí)回到原始

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

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

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

    1. [RequireComponent(typeof(ItemUI))] 在拖拽物品上自動(dòng)添加ItemUI

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

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

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

      2. 用來(lái)臨時(shí)儲(chǔ)存拖拽信息,使用的時(shí)候new一個(gè)新值

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

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

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

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

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

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

      1. 代碼手冊(cè):https://docs.unity.cn/cn/current/ScriptReference/EventSystems.IPointerClickHandler.html

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

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

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

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

  • ActionButton

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

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

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

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

  • ItemToolTip物品信息顯示欄

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

    2. 腳本ItemToolTip

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

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

        1. 1 2

        2. 0 3

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

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

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

  • Loot Item 掉落物品

    1. LootSpawner腳本

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

      2. SpwanLoot

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

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

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

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

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

      1. rectTransform.anchoredPosition += eventData.delta / canvas.scaleFactor;

    2. IPointerDownHandler

      1. 渲染層級(jí):RectTransform.SetSiblingIndex / Get...

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

    1. InventoryManager 中 Input.GetAxisRaw("Mouse ScrollWheel")檢測(cè)滾輪輸入 上為正,下為負(fù)

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

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

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

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


Inventory背包學(xué)習(xí)筆記的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
子洲县| 晋中市| 抚远县| 红桥区| 镇沅| 万盛区| 中超| 临颍县| 平度市| 谢通门县| 永定县| 诸城市| 广饶县| 礼泉县| 临安市| 和林格尔县| 新丰县| 灵丘县| 绥芬河市| 邵武市| 朔州市| 武鸣县| 陈巴尔虎旗| 西贡区| 松阳县| 宁武县| 灵璧县| 大余县| 洛隆县| 温泉县| 顺平县| 宁明县| 屯门区| 武宣县| 宝兴县| 香格里拉县| 平顶山市| 五台县| 神池县| 鄂托克旗| 鄯善县|