物品管理器
-
物品数据 Item.json(json部分)(Resources/Data/Item)
[{
"id": 1,
"name": "新手剑",
"des": "这是一把宝剑",
"price": 200,
"icon": "",
"attack": 10,
"hp": 0
},
{
"id": 2,
"name": "新手药剂",
"des":"这是新手药剂",
"price": 100,
"icon": "",
"attack" : 0,
"hp": 10
}]
-
物品管理类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
public class ItemManager
{
private static ItemManager instance;
public static ItemManager Instance{
get
{
if(instance == null) {
instance = new ItemManager();
}
return instance;
}
}
//所有的物品信息
private Item[] items;
public ItemManager(){
TextAsset json = Resources.Load<TextAsset>("Data/Item");
//解析json
items = LitJson.JsonMapper.ToObject<Item[]>(json.text);
}
//通过物品id获取物品
public Item GetItem(int id){
foreach (Item item in items){
if(item.id == id) {
return item;
}
}
return null;
}
}
背包管理器
-
InventoryManager
using System.Collections;
using System.Collections.Generic;
//背包格子
public class InventoryItem{
//物品id
public int ItemId;
//个数
public int Count = 1;
}
public class InventoryManager
{
//单例模式
private static InventoryManager instance;
public static InventoryManager Instance{
get{
if(instance == null){
instance = new InventoryManager();
return instance;
}
return instance;
}
}
//背包集合
public List<InventoryItem> Inventory = new List<InventoryItem>();
//添加物品
public void AddItem(int itemId, int count = 1){
//查看背包中是否已经存在该物品
foreach (InventoryItem tmpItem in Inventory){
if (tmpItem.ItemId == itemId){
//存在,就数量自增
tmpItem.Count += count;
return;
}
}
//背包中不存在该物品
InventoryItem item = new InventoryItem();
item.ItemId = itemId;
item.Count = count;
Inventory.Add(item);
}
//移除物品
public void Removeltem(int itemId, int count = 1){
//遍历背包
for (int i = 0; i < Inventory.Count; i++){
InventoryItem item = Inventory[i];
//如果存在该物品
if (item.ItemId == itemId && item.Count > 0){
//删除
item.Count -= count;
if (item.Count <= 0){
Inventory.Remove(item);
}
}
}
}
//获取物品
public InventoryItem GetItem(int itemId){
foreach (InventoryItem tmpItem in Inventory){
if (tmpItem.ItemId == itemId){
return tmpItem;
}
}
return null;
}
//清空背包
public void RemoveAllItem() {
Inventory.Clear();
}
}
角色管理器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//角色基本信息
public class Bai_Character{
//姓名
public string Name ="张三";
//等级
public int Level = 1;
//经验
public int CurrentExp = 0;
public int Hp = 0;
//最大血量
public int MaxHp{
get{
return Level * 10;
}
}
//升到下一级需要的经验
public int GetNextLevelExp(){
return Level * 50;
}
//装备 -1代表无
public int WeaponId = -1;
public int ClothesId = -1;
public int ShoesId = -1;
//技能
public List<int> SkillList = new List<int>();
}
public class CharacterManager
{
private static CharacterManager instance;
public static CharacterManager Instance{
get{
if(instance == null){
instance = new CharacterManager();
return instance;
}
return instance;
}
}
//玩家
public Bai_Character character = new Bai_Character();
//金钱
public int Money = 0;
//当前角色是否可控
public bool canControl = true;
//增加/减少金钱
public void ChangeMoney(int money){
Money += money;
if (Money < 0) Money = 0;
}
//增加经验
public void AddExp(int exp){
character.CurrentExp += exp;
//判断经验是否升级
if (character.CurrentExp >= character.GetNextLevelExp()){
//升级
character.Level++;
character.CurrentExp = 0;
}
}
//改变血量
public void ChangeHp(int hp){
character.Hp += hp;
//限制character.Hp的范围[0, character.MaxHp]
character.Hp = Mathf.Clamp(character.Hp, 0, character.MaxHp);
}
#region 任务技能
//添加技能
public bool AddSkill(int skillld){
if(character.SkillList.Contains(skillld)){
return false;
}
character.SkillList.Add(skillld);
return true;
}
//是否拥有此技能
public bool HasSkill(int skillld){
return character.SkillList.Contains(skillld);
}
//移除技能
public void RemoveSkill(int skillld){
if (character.SkillList.Contains(skillld)){
character.SkillList.Remove(skillld);
}
}
//所有技能
public int[] GetSkills(){
return character.SkillList.ToArray();
}
#endregion
#region 人物装备
//装备武器
public void AddWeapon(int id){
//如果背包有这个武器,允许装备
InventoryItem item = InventoryManager.Instance.GetItem(id);
if (item!= null)
{
InventoryManager.Instance.Removeltem(id,1);
}
//如果当前有武器,武器卸载下来放入背包
if (character.WeaponId > -1){
InventoryManager.Instance.AddItem(character.WeaponId, 1);
}
character.WeaponId = id;
}
//获取当前武器
public int GetWeapon(){
return character.WeaponId;
}
//移除当前武器
public void RemoveWeapon(){
//如果当前有武器,武器卸载下来放入背包if (character.Weaponld > -1)
InventoryManager.Instance.AddItem(character.WeaponId,1);
}
#endregion
}