前面的三篇无论是交易,任务,还是装备,都无法离开这个东东,背包,背包作为一个容器对玩家来说,在游戏中获得的一切可使用物品都保存在这里,不管它是不是一个我们常见的格子容器类型(阿玛拉王国这样的游戏背包就没有形态,直接一个选项,其实仙剑也没有),仙剑的背包一直没有个固定形态,不知道仙剑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里面,到时候在详细的写出来吧。。