我们的游戏世界(背包【仓库】,交易,任务,简单经济系统,装备)实现(基于仙剑demo聊聊游戏世界)第四篇谈谈背包

37 篇文章 1 订阅

前面的三篇无论是交易,任务,还是装备,都无法离开这个东东,背包,背包作为一个容器对玩家来说,在游戏中获得的一切可使用物品都保存在这里,不管它是不是一个我们常见的格子容器类型(阿玛拉王国这样的游戏背包就没有形态,直接一个选项,其实仙剑也没有),仙剑的背包一直没有个固定形态,不知道仙剑6会不会有,不过不论有没有固定形态,我们这里只说他的原理,看看他是怎么实现的,

[System.Serializable]
	public class Bag{
		public int item_id;
		public int item_amount;
		public Item_Data.Equipment_Type equipmentType;
		public int linkIndex;
		public bool isItem;
		public TypeSkillHover typeSkill;
	}
画出背包格子窗体
/// <summary>
	/// Functions the inventory window.
	/// </summary>
	private void FunctionWindow(int windowID){
		GUI.DragWindow(new Rect(0,0,10000,60));
		for(int i = 0; i < inventory[0].row; i++){
			for(int j = 0; j < inventory[0].colum; j++){
				int index = i+(j*inventory[0].row);
				if(useStyle){
					GUI.Box(new Rect(inventory[0].gridRect.x+(i*inventory[0].gridRect.width),inventory[0].gridRect.y+(j*inventory[0].gridRect.height),inventory[0].gridRect.width,inventory[0].gridRect.height), new GUIContent("",""+(index).ToString()), guiStyleGroup[0].gridStyle);
					if(Item_Data.instance != null){
						if(Item_Data.instance.Get_Item(bag_item[index].item_id) != null){
							GUI.DrawTexture(new Rect(inventory[0].gridRect.x+(i*inventory[0].gridRect.width),inventory[0].gridRect.y+(j*inventory[0].gridRect.height),inventory[0].gridRect.width,inventory[0].gridRect.height), Item_Data.instance.Get_Item(bag_item[index].item_id).item_Img);
							GUI.Label(new Rect(inventory[0].itemAmountRect.x+(i*inventory[0].itemAmountRect.width),inventory[0].itemAmountRect.y+(j*inventory[0].itemAmountRect.height),inventory[0].itemAmountRect.width,inventory[0].itemAmountRect.height), bag_item[index].item_amount.ToString(), guiStyleGroup[0].textAmountItemStyle);
						}else{
							GUI.DrawTexture(new Rect(inventory[0].gridRect.x+(i*inventory[0].gridRect.width),inventory[0].gridRect.y+(j*inventory[0].gridRect.height),inventory[0].gridRect.width,inventory[0].gridRect.height), null_Item_Texture);
						}
					}
					GUI.Box(inventory[0].goldRect, money.ToString(), guiStyleGroup[0].goldStyle);
				}else{
					GUI.Box(new Rect(inventory[0].gridRect.x+(i*inventory[0].gridRect.width),inventory[0].gridRect.y+(j*inventory[0].gridRect.height),inventory[0].gridRect.width,inventory[0].gridRect.height), new GUIContent("",""+(index).ToString()));
					if(Item_Data.instance != null){
						if(Item_Data.instance.Get_Item(bag_item[index].item_id) != null){
							GUI.DrawTexture(new Rect(inventory[0].gridRect.x+(i*inventory[0].gridRect.width),inventory[0].gridRect.y+(j*inventory[0].gridRect.height),inventory[0].gridRect.width,inventory[0].gridRect.height), Item_Data.instance.Get_Item(bag_item[index].item_id).item_Img);
							GUI.Label(new Rect(inventory[0].itemAmountRect.x+(i*inventory[0].itemAmountRect.width),inventory[0].itemAmountRect.y+(j*inventory[0].itemAmountRect.height),inventory[0].itemAmountRect.width,inventory[0].itemAmountRect.height), bag_item[index].item_amount.ToString(), guiStyleGroup[0].textAmountItemStyle);
						}else{
							GUI.DrawTexture(new Rect(inventory[0].gridRect.x+(i*inventory[0].gridRect.width),inventory[0].gridRect.y+(j*inventory[0].gridRect.height),inventory[0].gridRect.width,inventory[0].gridRect.height), null_Item_Texture);
						}
					}
					GUI.Box(inventory[0].goldRect, money.ToString());
				}
				hover = GUI.tooltip;
			}
		}
		
		GUI.DrawTexture(inventory[0].coinIconRect, coinIcon);
		
		if(pickupStay){
			Vector3 mousePos = Input.mousePosition;
			if(itemImg_Pickup != null){
				GUI.DrawTexture(new Rect(mousePos.x-20-inventory[0].windowInventoryRect.x, (Screen.height - mousePos.y)-20-inventory[0].windowInventoryRect.y, 40,40),itemImg_Pickup);	
			}
		}
		
		ShowDescriptionBag(inventory[0].windowInventoryRect, id_Hover);
	}
private int CheckSlotInventory(){
		for(int i = 0; i < inventory[0].row * inventory[0].colum; i++){
			Vector2 startPos = Vector3.zero;
			Vector2 endPos = Vector2.zero;
			startPos.x = inventory[0].windowInventoryRect.x + inventory[0].gridRect.x;
			startPos.y = inventory[0].windowInventoryRect.y + inventory[0].gridRect.y;
			endPos.x = inventory[0].windowInventoryRect.x + (inventory[0].gridRect.x + inventory[0].gridRect.width);
			endPos.y = inventory[0].windowInventoryRect.y + (inventory[0].gridRect.y + inventory[0].gridRect.height);
			if(HitTestWindow(startPos, endPos)){
				return i;	
			}
		}

		return -1;
	}

这一篇其实没什么东西,背包本身是配合其他,比如装备栏,物品栏,拾取等等东西存在的,单单拿出来其实看不到什么,先这样,后面的demo优化我会把它整合进ngui里面,到时候在详细的写出来吧。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值