My Inventory Script(Question is Under script)
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Inventory : MonoBehaviour {
public int slotsX = 5;
public int slotsY = 5;
public GUISkin skin;
public List<Item> inventory = new List<Item>();
public bool showInventory = false;
public bool showCrafting = false;
public static List<Recipe> recipes = new List<Recipe> ();
public Transform Hand;
public Transform Axeprefab;
public GameObject WoodEquip;
private Item swappedItem;
private bool draggingItem = false;
private Item draggedItem;
private int prevIndex;
private int spikeCount;
private Rect invRect = new Rect(200, 140, 350, 420);
private Rect imageRect = new Rect(0, 0, 50, 50);
private Rect craftRect = new Rect(0, 40, 350, 350);
private Vector2 scrollPosition = Vector2.zero;
// Use this for initialization
void Start ()
{
Screen.showCursor = false;
invRect = new Rect(Screen.width / 2 - (invRect.width / 2), 0, invRect.width, invRect.height);
craftRect = new Rect(Screen.width / 2 - craftRect.width - invRect.width / 2, 0, craftRect.width, craftRect.height);
for(int i = 0; i < (slotsX * slotsY); i++)
{
inventory.Add(new Item());
}
new RecipeCreator();
}
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.I))
{
showInventory = !showInventory;
showCrafting = !showCrafting;
Screen.showCursor = !Screen.showCursor;
if(draggingItem)
{
inventory[prevIndex] = draggedItem;
draggingItem = false;
draggedItem = null;
}
}
//Cheat Keys
if(Input.GetKeyDown("1"))
{
AddItem("Wood");
}
if(Input.GetKeyDown("2"))
{
AddItem("WoodPlanks");
}
if(Input.GetKeyDown("3"))
{
AddItem("Stone");
}
}
void OnGUI()
{
GUI.skin = skin;
if(showInventory)
{
GetCraftable();
invRect = GUI.Window(0, invRect, DrawInventory, "");
if(Event.current.type == EventType.mouseUp && draggingItem)
{
if(invRect.Contains(Event.current.mousePosition))
{
inventory[prevIndex] = draggedItem;
draggingItem = false;
draggedItem = null;
} else {
RemoveItem(prevIndex);
draggingItem = false;
draggedItem = null;
}
}
if(draggingItem)
{
CreateDraggedItem();
}
if(showCrafting)
{
craftRect = GUI.Window(5, craftRect, DrawCraftView, "");
}
}
}
void AddSpikes (float winX)
{
spikeCount = (int)Mathf.Floor (winX - 152) / 22;
GUILayout.BeginHorizontal ();
GUILayout.Label ("", "SpikeLeft");//-------------------------------- custom
for (int i = 0; i < spikeCount; i++) {
GUILayout.Label ("", "SpikeMid");//-------------------------------- custom
}
GUILayout.Label ("", "SpikeRight");//-------------------------------- custom
GUILayout.EndHorizontal ();
}
void DrawInventory(int windowId)
{
AddSpikes(windowId);
GUILayout.Label ("Inventory");
Event e = Event.current;
int i = 0;
for(int x = 0; x < slotsX; x++)
{
GUILayout.BeginHorizontal();
for(int y = 0; y < slotsY; y++)
{
GUILayout.BeginVertical();
GUILayout.Box (inventory*.itemIcon);*
_ if(inventory*.multiItems)_
_ {_
_ if(inventory.itemCounter > 1)
{
GUI.Box(GUILayoutUtility.GetLastRect(), inventory.itemCounter.ToString(), “ItemCounter”);
}
}*_
_ if(inventory*.itemName != null)
{
if(IsMouseOver())
{
if(e.button == 0 && e.type == EventType.mouseDown && !draggingItem)
{
draggingItem = true;
prevIndex = i;
draggedItem = inventory;
inventory = new Item();
}
if(Input.GetKeyDown(KeyCode.H))
{
Instantiate(Resources.Load(“” + inventory.itemName), Hand.position, Hand.rotation);
}*_
* if(e.type == EventType.mouseUp && draggingItem)*
* {*
_ inventory[prevIndex] = inventory*;
inventory = draggedItem;
draggingItem = false;
draggedItem = null;
}
}
}
else {
if(IsMouseOver())
{
if(e.type == EventType.mouseUp && draggingItem)
{
inventory = draggedItem;
draggingItem = false;
draggedItem = null;
}
}
}
GUILayout.EndVertical();
i++;
}
GUILayout.EndHorizontal();
}
GUI.DragWindow (new Rect(0, 0, 10000, 75));
}
void DrawCraftView(int windowID)
{
AddSpikes(craftRect.width);
Event e = Event.current;
GUILayout.Space(8);
GUILayout.Label(“Crafting”);
GUILayout.Label(“”, “Divider”);
scrollPosition = GUILayout.BeginScrollView(scrollPosition);
for(int i = 0; i < GetCraftable().Count; i++)
{
if(GUILayout.Button(GetCraftable()))
{
Craft(GetCraftable());
}
}
GUILayout.EndScrollView();
GUILayout.Label(“”, “Divider”);
GUILayout.Space(8);
GUI.DragWindow(new Rect(0, 0, 10000, 75));
}*_
* bool IsMouseOver()*
* {*
* return GUILayoutUtility.GetLastRect ().Contains (Event.current.mousePosition);*
* }*
* void CreateDraggedItem()*
* {*
* Rect tempRect = new Rect (Event.current.mousePosition.x + 5, Event.current.mousePosition.y, 64, 64);*
* imageRect = GUI.Window (2, tempRect, DrawDraggedItem, “”, “DragImage”);*
* }*
* void DrawDraggedItem(int windowID)*
* {*
* GUILayout.Box (draggedItem.itemIcon, “DragImage”);*
* }*
* public void AddItem(int id)*
* {*
* if(Database.isItemMultiple(id))*
* {*
* if(InventoryContains(id))*
* {*
* AddItemToExisting(id);*
* return;*
* }*
* }*
* for(int i = 0 ; i < inventory.Count; i++)*
* {*
_ if(inventory*.itemName == null)
{
for(int j = 0; j < Database.items.Count; j++)
{
if(Database.items[j].itemID == id)
{
Database.CopyItem(inventory, Database.items[j]);
}
}
break;
}
}
}*_
* public void AddItem(string name)*
* {*
* if(Database.isItemMultiple(name))*
* {*
* if(InventoryContains(name))*
* {*
* AddItemToExisting(name);*
* return;*
* }*
* }*
* for(int i = 0 ; i < inventory.Count; i++)*
* {*
_ if(inventory*.itemName == null)
{
for(int j = 0; j < Database.items.Count; j++)
{
if(Database.items[j].itemName == name)
{
Database.CopyItem(inventory, Database.items[j]);
}
}
break;
}
}
}*_
* public void AddItem(Item item)*
* {*
* if(Database.isItemMultiple(item.itemID))*
* {*
* if(InventoryContains(item.itemID))*
* {*
* AddItemToExisting(item.itemID);*
* return;*
* }*
* }*
* for(int i = 0 ; i < inventory.Count; i++)*
* {*
_ if(inventory*.itemName == null)
{
inventory = item;
break;
}
}
}*_
* void RemoveItem(string name, int amount)*
* {*
* int removed = 0;*
* for(int i = 0; i < inventory.Count; i++)*
* {*
_ if(inventory*.itemName == name)
{
if(inventory.multiItems)
{
if(inventory.itemCounter > (amount - removed))
{
inventory.itemCounter -= (amount - removed);
break;
}
else if(inventory.itemCounter == (amount - removed)){
inventory = new Item();
break;
} else {
removed += inventory.itemCounter;
inventory = new Item();
if(removed >= amount)
{
break;
}
}
} else {
if(removed < amount)
{
removed ++;
inventory = new Item();
} else {
break;
}
}
}
}
}*_
* void RemoveItem(int index)*
* {*
* inventory[index] = new Item ();*
* }*
* bool InventoryContains(int id)*
* {*
* for(int i = 0; i < inventory.Count; i++)*
* {*
_ if(inventory*.itemID == id)
{
return true;
}
}
return false;
}*_
* bool InventoryContains(string name)*
* {*
* for (int i = 0; i < inventory.Count; i++)*
* {*
_ if (inventory .itemName == name)
* {
return true;
}
}
return false;
}*_
* bool InventoryContains(string name, int amount)*
* {*
* for (int i = 0; i < inventory.Count; i++)*
* {*
_ if(inventory .itemName == name)
* {
if (inventory .multiItems)
{
if (inventory .itemCounter >= amount)
{
return true;
}
} else {
return false;
}
}
}
return false;
}*_
* void AddItemToExisting(int id)*
* {*
* for(int i = 0; i < inventory.Count; i++)*
* {*
_ if(inventory*.itemID == id)
{
inventory.itemCounter ++;
}
}
}*_
* void AddItemToExisting(string name)*
* {*
* for(int i = 0; i < inventory.Count; i++)*
* {*
_ if(inventory*.itemName == name)
{
inventory.itemCounter ++;
}
}
}
public List GetCraftable()
{
List craftable = new List();
for(int i = 0; i < recipes.Count; i++)
{
foreach(var mat in recipes.items.Keys)
{
if(InventoryContains(mat, recipes.items[mat]))
{
craftable.Add(recipes.itemName);
}
}
}
return craftable;
}
public void Craft(string item)
{
List craftable = GetCraftable();
for(int i = 0; i < recipes.Count; i++)
{
if(recipes.itemName == item)
{
foreach(var mat in recipes.items.Keys)
{
RemoveItem(mat, recipes.items[mat]);
}
}
}
AddItem(item);
}*_
}
The item spawns like i want it to but it doesn’t move with the player, it just floats in mid-air. i know that you need to set the parent to the hand object but when i tried it wouldn’t work.
if(Input.GetKeyDown(KeyCode.H))
* {*
_ GameObject Clone = Instantiate(Resources.Load(“” + inventory*.itemName), Hand.position, Hand.rotation);
Clone.transform.SetParent(Hand);
}*
This is what i tried but when i did i got the error " Cannot implicitly convert type UnityEngine.Object' to
UnityEngine.GameObject’. An explicit conversion exists (are you missing a cast?)"_