Quantcast
Channel: Questions in topic: "parenting"
Viewing all articles
Browse latest Browse all 302

How can i set the parent of an instantiated object like a weapon to my players hand.

$
0
0
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 inventory = new List(); public bool showInventory = false; public bool showCrafting = false; public static List recipes = new List (); 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[i].itemIcon); if(inventory[i].multiItems) { if(inventory[i].itemCounter > 1) { GUI.Box(GUILayoutUtility.GetLastRect(), inventory[i].itemCounter.ToString(), "ItemCounter"); } } if(inventory[i].itemName != null) { if(IsMouseOver()) { if(e.button == 0 && e.type == EventType.mouseDown && !draggingItem) { draggingItem = true; prevIndex = i; draggedItem = inventory[i]; inventory[i] = new Item(); } if(Input.GetKeyDown(KeyCode.H)) { Instantiate(Resources.Load("" + inventory[i].itemName), Hand.position, Hand.rotation); } if(e.type == EventType.mouseUp && draggingItem) { inventory[prevIndex] = inventory[i]; inventory[i] = draggedItem; draggingItem = false; draggedItem = null; } } } else { if(IsMouseOver()) { if(e.type == EventType.mouseUp && draggingItem) { inventory[i] = 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()[i])) { Craft(GetCraftable()[i]); } } 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[i].itemName == null) { for(int j = 0; j < Database.items.Count; j++) { if(Database.items[j].itemID == id) { Database.CopyItem(inventory[i], 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[i].itemName == null) { for(int j = 0; j < Database.items.Count; j++) { if(Database.items[j].itemName == name) { Database.CopyItem(inventory[i], 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[i].itemName == null) { inventory[i] = item; break; } } } void RemoveItem(string name, int amount) { int removed = 0; for(int i = 0; i < inventory.Count; i++) { if(inventory[i].itemName == name) { if(inventory[i].multiItems) { if(inventory[i].itemCounter > (amount - removed)) { inventory[i].itemCounter -= (amount - removed); break; } else if(inventory[i].itemCounter == (amount - removed)){ inventory[i] = new Item(); break; } else { removed += inventory[i].itemCounter; inventory[i] = new Item(); if(removed >= amount) { break; } } } else { if(removed < amount) { removed ++; inventory[i] = 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[i].itemID == id) { return true; } } return false; } bool InventoryContains(string name) { for (int i = 0; i < inventory.Count; i++) { if (inventory [i].itemName == name) { return true; } } return false; } bool InventoryContains(string name, int amount) { for (int i = 0; i < inventory.Count; i++) { if(inventory [i].itemName == name) { if (inventory [i].multiItems) { if (inventory [i].itemCounter >= amount) { return true; } } else { return false; } } } return false; } void AddItemToExisting(int id) { for(int i = 0; i < inventory.Count; i++) { if(inventory[i].itemID == id) { inventory[i].itemCounter ++; } } } void AddItemToExisting(string name) { for(int i = 0; i < inventory.Count; i++) { if(inventory[i].itemName == name) { inventory[i].itemCounter ++; } } } public List GetCraftable() { List craftable = new List(); for(int i = 0; i < recipes.Count; i++) { foreach(var mat in recipes[i].items.Keys) { if(InventoryContains(mat, recipes[i].items[mat])) { craftable.Add(recipes[i].itemName); } } } return craftable; } public void Craft(string item) { List craftable = GetCraftable(); for(int i = 0; i < recipes.Count; i++) { if(recipes[i].itemName == item) { foreach(var mat in recipes[i].items.Keys) { RemoveItem(mat, recipes[i].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[i].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?)"

Viewing all articles
Browse latest Browse all 302

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>