《迷失岛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》游戏开发框架开发日记:场景切换和淡入淡出效果
M_Studio的教程:[<迷失岛2>游戏框架开发01:实现场景转换|Unity教程] 搭建场景 使用下载好的素材搭建场景H1-H4和H2A.永久的场景Persistent,将场景都拖拽到 ...
- 【迷失岛游戏框架开发个人每集总结(第三期)】
目录 系列文章目录 前言 1代码 1.1 1.2 1.3 1.4 2 总结 系列文章目录 迷失岛游戏框架开发个人每集总结(第一期) 迷失岛游戏框架开发个人每集总结(第二期) 前言 在上一期中,我们实现 ...
- 【迷失岛游戏框架开发个人每集总结(第四期)】
目录 系列文章目录 前言 1 1.1 1.2 1.3 2 总结 系列文章目录 迷失岛游戏框架开发个人每集总结(第一期) 迷失岛游戏框架开发个人每集总结(第二期) 迷失岛游戏框架开发个人每集总结(第三期 ...
- libGDX跨平台游戏开发框架入门:开发一个小游戏之加载资源
目录 前言 加载资源 libGDX资源目录说明 配置各个平台启动器 desktop模块启动器设置 Android模块启动器设置 加速度计和指南针 html模块启动器设置 编写加载资产代码 1. 加载图 ...
- 迷失岛3计算机密码,迷失岛3在计算机内输入隐藏字母怎么完成_迷失岛3计算机天才成就攻略_玩游戏网...
<迷失岛3>一周目第三关攻略 迷失岛3宇宙的尘埃一周目第三关怎么过?迷失岛系列第三部终于上线了,小编这里带来了迷失岛3一周目第三关攻略,想要参考的玩家们就一起来看看吧!>>&g ...
- SDL2 游戏开发日记(九) 单机麻将
SDL2 游戏开发日记(九) 单机麻将 单机麻将的基本功能其实年前已经完成了,只是写文档麻烦,再加上懒癌和重度拖延症,就一直拖着没更新.今天周末一个人没什么事干,抽空把它更新了. 麻将的表示 用数组表 ...
- libgdx游戏引擎开发笔记(一)引擎介绍和Helloworld
做Android快一年了,项目也做了四五个,感觉没什么动力向前,思绪整理了一段时间,决定转入Android游戏开发,同时发现了一款强大的游戏引擎libgdx,在此边学边整理,好记性不如烂笔头嘛! ...
- 跨平台2D/3D游戏开发框架libGDX发布1.2.0更新
摘要:基于OpenGL (ES)的跨平台2D/3D游戏开发框架libGDX不仅开源免费,而且具有极为强大的兼容性和高效性,近日,libGDX发布全新1.2.0版本,除修复Bug之外,还新增了OpenG ...
- Java(Android)游戏开发框架LGame-0.2.7发布
Java(Android)游戏开发框架LGame-0.2.7发布 2010-08-19更新内容: 1.针对Android版增加了多点触摸支持. 2.增加了一组模拟按钮,以Screen实现Emulato ...
最新文章
- 互联网跨界营销掘金“大数据”
- Android开发之程序员必须要懂得Android的重要设计理念
- 学习笔记--Spark
- python科学计算基础教程pdf下载-python科学计算 第二版 PDF 下载
- 一个略显复杂的transformation算子_distinct
- 在Ubuntu 16.04 安装python3.6 环境并设置为默认
- .xyz文件_Orca.xyz:除了银行系统瑞士还有同样安全的数字保险箱
- iOS微信运动 刷分
- 矩阵范数的等价性(原创)
- STM8L101和STM8S103差异对比
- nginx配置CSP策略和Nonce随机数方案
- foxmail收取服务器邮件次数,Foxmail:如何设置收取历史邮件?
- html5开发app的视频教程及相关资料
- 工厂模式与抽象工厂模式
- MacOSx打包dmg文件(带背景图片)
- USACO Palindromic Squares 回文平方数
- ❤️小白到精英必备的100多个Python函数汇总❤️写代码都流畅多了
- mysql数字型检索比字符型检索快_mysql温故知新
- Windows程序员初学Linux内核(附Linux内核各版本历史纪年表)
- [NE-A] 动作电位 Action Potential