《迷失岛2》游戏开发框架开发日记:背包基本逻辑

Posted 阿宝逃离地球

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《迷失岛2》游戏开发框架开发日记:背包基本逻辑相关的知识,希望对你有一定的参考价值。

使用mvc思想,将背包道具数据(道具名、道具ui的图片)信息存放在继承了Scriptable类的实例化对象中,然后用InventoryManager去管理和控制每个道具对象上的Item,Item设置相关的道具信息可以让InventoryManager知道是哪一个Item(道具)。

什么是MVC
M即Model(模型)
V即View(视图)
C即Control(控制)
而使用MVC的目的就是将M和V进行代码分离,便于逻辑区分

将所有的道具的名字存放在枚举类中Enums.cs,暂写一个Key


/// <summary>
/// 每个道具的名字
/// </summary>
public enum ItemName

    None,
    Key,
    // .....

InventoryManager.cs负责将点击的道具名字存储进来

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class InventoryManager : Singleton<InventoryManager>

    // [SerializeField]使私有化的字段可以在inspector面板中被看见
    [SerializeField] private List<ItemName> itemNames;

    private void Start()
    
        itemNames = new List<ItemName>();
    
    public void AddItem(ItemName itemName)
    
    // 如果背包中不存在此物体则添加进去
        if (!itemNames.Contains(itemName))
        
            itemNames.Add(itemName);
            // 根据当前的item显示对应的ui图标
        
    


场景中的道具添加对应的碰撞体并勾选IsTrigger,添加脚本Item.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class Item : MonoBehaviour

    public ItemName itemName;

    // 根据item的名字添加背包的数据
    public void AddItem()
    
        // 使用单例来添加该item的数据到总体的数据中
        InventoryManager.Instance.AddItem(this.itemName);
        // 设置为不可见
        this.gameObject.SetActive(false);
    

存储每个道具信息ItemDataList_SO.cs,继承ScriptableObject

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 使project面板右键增加scriptbale文件
[CreateAssetMenu(fileName = "ItemDataList_SO", menuName = "Inventory/ItemDataList_So")]
public class ItemDataList_SO : ScriptableObject

    // 
    public List<ItemDetails> itemDetailsList;

    // 获取对应的item的信息
    public ItemDetails GetItemDetails(ItemName itemName)
    
        return itemDetailsList.Find(i => i.itemName == itemName);
    


/// <summary>
/// 存储每个item对应的详细信息, 使之可见在inspector面板上
/// </summary>
[System.Serializable]
public class ItemDetails

    public ItemName itemName;
    public Sprite itemSprite;


最后在之前的CursorManager.cs中修改函数ClickAction(GameObject clickObject),添加对Tag为Item的道具的操作

public void ClickAction(GameObject clickObject)
    
        switch (coll.gameObject.tag)
        
            case "Teleport":

                // 获取对象上的Teleport组件,执行场景切换方法
                Teleport t = clickObject.GetComponent<Teleport>();
                t?.TransitionScene();
                break;
            case "Item":
                Item item = clickObject.GetComponent<Item>();
                item?.AddItem();
                break;
            default:
                break;
        
    

以上是关于《迷失岛2》游戏开发框架开发日记:背包基本逻辑的主要内容,如果未能解决你的问题,请参考以下文章

《迷失岛2》游戏开发框架开发日记:背包基本逻辑

《迷失岛2》游戏开发框架开发日记:场景切换和淡入淡出效果

《迷失岛2》游戏开发框架开发日记:场景切换和淡入淡出效果

《迷失岛2》游戏开发框架开发日记:场景切换和淡入淡出效果

Unity游戏开发:背包系统的实现

Unity 背包道具搜索