2016-07-01 7 views
1

3 개의 저장소로 인벤토리를 만드는 방법. 예를 들어Unity C#에서 인벤토리 페이징을 만드는 방법은 무엇입니까?

내가 밀면 저장 한 단추는 인벤토리 20 개 슬롯,

내가 밀면 스토리지 (2)은 인벤토리 40 개 슬롯까지 21 개 슬롯에서 표시 할 버튼을

난 경우를 보여줄 것이다 저장 장치 3 푸시 버튼을 누르면 41 개의 슬롯부터 60 개의 슬롯까지 표시됩니다.

그래서 총 60 개의 슬롯이 있습니다.

의 내 코드 아래

:

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); 
    } 
    } 

감사

업데이트 코드 : 내가 저장 한 버튼을 누르면 경우

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

20 개의 슬롯이있는 스토리지를 생성하라는 논리를 묻고 있습니까? 1 번 버튼을 1 번 클릭하면 1-20, 2 번을 클릭하면 21-40이 표시되고 3 번을 누르면 41-60이 표시됩니다. (버튼 -1) *보기 +1 => 버튼 *보기. 버튼에 1,2,3이라는 값이 있다고 가정합니다. – Miller

+0

예 @ 밀러,하지만 난 이미 아래 답변을 .. 감사합니다 밀러 :) –

답변

1

"가 표시됩니다 인벤토리에 20 개의 슬롯이 있으며, 스토리지 2 버튼을 누르면 표시됩니다. 재고 목록에서 40 개의 슬롯까지 21 개의 슬롯에서부터 저장 버튼을 누르면 41 개의 슬롯에서 60 개의 슬롯까지 표시됩니다. "

1 , 캔버스

2를 추가 클릭, 사실 버튼 아래에있는 버튼의 "텍스트는"이 세 가지

3을 추가 ... 버튼을 클릭하여 추가합니다. 세 개의 버튼 레이블을 "저장 1", "저장 2", "저장 3"

4,이 같은 스크립트 뭔가를 ...

5

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); 
} 
,이 세 가지 루틴에서, 무엇을 호출하면 필요. 이미 뭔가하는 스크립트가있는 것처럼 보입니다. 간단히 말하자면, 다른 "금액"을 가지고있는 것과 같은 3 개의 스크립트가 있습니다. 세 개의 다른 버튼에서 세 개의 다른 스크립트를 호출하면됩니다.

숨겨진 모든 것을 3 개만 설정 한 다음 필요한 항목을 표시하십시오.

정말 쉽습니다! 코드 편집에


주,

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

이 잘못 "hslot = GameObject.Find ("슬롯 - "+ I) .SetActive (TRUE);"

또한 전체 루프가 잘못,

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); 
    } 

그것이 도움이되기를 바랍니다해야합니다!

참고 :

GameObject.Find는 비활성 객체를 찾지 않습니다!

아직 배열에 보관 중입니다. (내가 생각하는 slotsx)

그냥 그 배열을 사용하십시오!


마지막으로, 사실이 작업을 수행해야합니다 : 세 개의 빈 게임 오브젝트 그냥 사용 안 함에서

그룹의 모든 슬롯 /들을 수 있습니다. 이렇게하면 루프가 필요 없습니다.

+0

나는 당신에게 조언을 따르지만, 최근 슬롯이 여전히 나타납니다. 스토리지 2 슬롯을 클릭하면 slorage 1 슬롯을 숨기는 방법은 무엇입니까? 고마워 –

+0

기본적으로 ** SetActive (false) **를 사용하십시오. 그 몇 가지 예를 찾을 수 있습니까? 또한 데니스는 당신이 논평 한 답변을 "틱"하고 공감을 얻었습니다. – Fattie

+0

Hehee ... 미안 .. 나는 질문을 "틱"하는 것을 잊는다. –