2016-07-01 23 views
1

So erstellen Sie ein Inventar mit 3 Storage. Zum Beispiel:Wie führe ich eine Inventarisierung auf Unity C# durch?

wenn i drücken Speicher 1-Taste wird es 20 Slots an Inventar zeigen,

wenn i drücken Speicher 2 Taste aus 21 Slots bis 40 Slots an Inventar zeigen werden, und

wenn i push storage 3 button zeigt von 41 Slots bis 60 Slots im Inventar.

so haben Sie alle 60 Steckplätze insgesamt.

unter seinem meinen Code:

inventory.cs

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine.UI; 

public class inventory : MonoBehaviour { 
    public List<GameObject> slotsx = new List<GameObject>(); 
    public player Player; 
    public List<item> itemx = new List<item>(); 
    public GameObject slots; 
    item itemxs; 
    public int indexofdragitem; 
    public Sprite icon; 

    int sisa; 
    itemDatabase database; 
    int totalSlot = 60; 
    int currentStorage = 1; 
    int view = 20; 

    // Use this for initialization 
    void Start() { 
     Player = new player(); 
     int slotAmount = 0; 
     database = GameObject.FindGameObjectWithTag ("itemDatabase").GetComponent<itemDatabase>(); 


     //Generate the Slot and Slot Name; 
     for(int i = 1; i <= 60; i++) { 
       GameObject Slot = (GameObject) Instantiate(slots); 
       Slot.GetComponent<slotScript>().slotNumber = slotAmount; 

       slotsx.Add(Slot); 

       Player.items.Add(new item()); 
       addChilParent (this.gameObject,Slot); 
       //Slot.transform.parent = this.gameObject.transform; 
       Slot.name = "slot-" + i; 
       Slot.SetActive(false); 
       slotAmount++; 

     } 
     ShowStorage1(); 

    } 

    //Add Slot Child To GridSlot Game Object 
    public void addChilParent(GameObject parentx, GameObject childx) { 
     childx.transform.SetParent (parentx.gameObject.transform); 
    } 
    } 

Dank

Update-Code:

public void onClickStorage1() { 
     HideAllSlot(); 
     ShowStorage1(); 
    } 

    public void onClickStorage2() { 
     HideAllSlot(); 
     ShowStorage2(); 
    } 

    public void onClickStorage3() { 
     HideAllSlot(); 
     ShowStorage3(); 
    } 

    public void HideAllSlot() { 
     GameObject hslot; 
     for(int i = 1; i <= 60; i++) { 
      hslot = GameObject.Find("slot-"+i); 
      hslot.SetActive(false); 
     } 
    } 

    public void ShowStorage1() { 
     GameObject hslot; 
     for(int i = 1; i <= 20; i++) { 
      hslot = GameObject.Find("slot-"+i).SetActive(true); 
      hslot.SetActive(true); 
     } 
    } 

    public void ShowStorage2() { 
     GameObject hslot; 
     for(int i = 21; i <= 40; i++) { 
      hslot = GameObject.Find("slot-"+i); 
      hslot.SetActive(true); 
     } 
    } 

    public void ShowStorage3() { 
     GameObject hslot; 
     for(int i = 41; i <= 60; i++) { 
      hslot = GameObject.Find("slot-"+i); 
      hslot.SetActive(true); 
     } 
    } 
+0

Fragen Sie nach der Logik, Speicher mit 20 Steckplätzen zu erstellen. Wenn 1 auf den Button 1 klickt, wird 1-20 angezeigt, bei 2 Klick 21-40 und bei 3 wird der 41-60 angezeigt. (Taste -1) * Ansicht +1 => Taste * Ansicht. Angenommen, Button hat den Wert 1,2,3. – Miller

+0

Ja @Miller, Aber ich habe bereits die Antwort unten .. Vielen Dank Miller :) –

Antwort

1

„, wenn i Speicher 1-Taste drücken wird es zeigen 20 Slots im Inventar, wenn ich Speicher 2 Taste drücken, wird es angezeigt von 21 Slots bis zu 40 Slots im Inventar, und wenn ich den Speicher 3 Knopf drücke, wird es von 41 Slots bis 60 Slots im Inventar angezeigt. "

1, klicken Sie auf Leinwand hinzufügen

2 finden Sie Knopf in der Tat .. hinzufügen

3, unter Knopf drei hinzuzufügen, ist es der "Text" der Taste. Beschriften Sie die drei Schaltflächen "Speicher 1", "Storage 2", "Storage 3"

4, haben ein Skript so etwas wie dieses ...

public GameObject yourFIRSTPanel; 
public GameObject yourSECONDPanel; 
public GameObject yourTHIRDPanel; 

private void HideAllThreePanels() 
{ 
yourFIRSTPanel.setActive(false); 
yourSECONDPanel.setActive(false); 
yourTHIRDPanel.setActive(false); 
} 



public void UserClickedS1() 
{ 
Debug.Log("storage 1 needed!") 
HideAllThreePanels() 
yourFIRSTPanel.setActive(true); 
} 
public void UserClickedS2() 
{ 
Debug.Log("storage 2 needed!") 
HideAllThreePanels() 
yourSECONDPanel.setActive(true); 
} 
public void UserClickedS3() 
{ 
Debug.Log("storage 3 needed!") 
HideAllThreePanels() 
yourTHIRDPanel.setActive(true); 
} 

5, in diesen drei Routinen, rufen Sie, was Sie wollen. Sie scheinen bereits ein Skript zu haben, das ... etwas bewirkt. haben Sie einfach so drei Skripte, die die verschiedenen "Beträge" haben oder was immer Sie sagen. Rufen Sie einfach die drei verschiedenen Skripte aus den drei verschiedenen Schaltflächen auf.

Beachten Sie, dass Sie einfach alle drei zu verbergen, und dann das benötigte Element offenbaren.

es ist so einfach!


Hinweis im Code bearbeiten,

for(int i = 1; i <= 20; i++) { 
     hslot = GameObject.Find("slot-"+i).SetActive(true); 
     hslot.SetActive(true); 
    } 

das ist falsch: "hslot = GameObject.Find (" Slot - "+ i) .SetActive (true);"

auch die ganze Schleife ist falsch, sollte

for(int i = 1; i <= 20; i++) { 
     String theName = "slot-" + i.ToString(); 
     Debug.Log("Looking for: " +theName); 
     GameObject gFound = GameObject.Find("slot-"+i); 
     if (gFound == nil) 
     { 
     Debug.Log("COULD NOT FIND IT! " +theName); 
     continue; 
     } 
     gFound.SetActive(true); 
    } 

sein hoffe, es hilft!

HINWEIS JEDOCH DAS!

GameObject.Find findet nicht inaktive Objekte!

Beachten Sie, dass Sie BEREITS IN EINEM ARRAY BEHALTEN! (slotsx denke ich.)

Verwenden Sie einfach dieses Array!


schließlich in der Tat sollten Sie dies tun:

Gruppe alle Schlitze unter drei leere Gameobjects und nur deaktivieren/diejenigen aktivieren. Auf diese Weise brauchen Sie keine Schleife.

+0

Ich habe dir Rat folgen, aber die jüngsten Slot noch zeigen. Wie kann ich den slorage 1 Slot verstecken, wenn ich auf den Storage 2 Slot klicke? Danke also –

+0

also grundsätzlich, benutze **. SetActive (false) **. Können Sie nach einigen Beispielen suchen? Auch Dennis ist es höflich, eine Antwort "anzukreuzen", die Sie kommentiert haben und von der Sie etwas bekommen haben. – Fattie

+0

Hehee ... Entschuldigung .. Ich vergesse die Frage "anzukreuzen". –