Как реализовать следующую кнопку и предыдущую кнопку из списка моделей в единстве? - PullRequest
0 голосов
/ 17 января 2019

У меня есть список из 10 моделей в списке. Изначально в моей сцене присутствует модель, скажем, модель [0]. Когда я нажимаю следующую кнопку, она должна показывать модель [1] до модели [9]. Аналогично предыдущей кнопке в обратном порядке.

Я написал логику внутри кода. Я знаю, что это не стандартная логика, но я верю в работу. Помимо этой логики, существует простой способ реализации.

public GameObject [] dress;

public void PreviousModel()
{
    int counter = dress.Length;//Dont know what to write here
    Debug.Log(counter);
    if(counter > -1)
    {
        counter--;
        dress[counter].SetActive(true);
        dress[counter+1].SetActive(false);
    }

}

public void NextModel()
{


}

Ответы [ 2 ]

0 голосов
/ 17 января 2019

В качестве альтернативы ответа, используя Clamp, вы можете также обернуть индекс как

public GameObject [] dress;

private int _index;

public void PreviousModel()
{
    // Hide current model
    dress[index].SetActive(false);

    _index--;
    if(index < 0)
    {
        index = dress.Length -1;
    }

    // Show previous model
    dress[index].SetActive(true);
}

public void NextModel()
{
    // Hide current model
    dress[index].SetActive(false);

    _index++;

    if(index > dress.Length -1)
    {
        index = 0;
    }

    // Show next model
    dress[index].SetActive(true);
}

Таким образом, если вы нажмете следующую на последней записи, она перейдет к первой, а не будет ничего не делать.


если я понимаю ваш комментарий

значение индекса у меня такое же, как и у модели, присутствующей в сцене

правильно, вы имеете в виду, что при запуске этого скрипта вам нужно получить текущую зависимость индекса от текущей активной модели:

private void Start()
{
    // Get the index of the currently active object in the scene
    // Note: This only gets the first active object
    // so only one should be active at start
    // if none is found than 0 is used
    for(int i = 0; i < dress.Length; i++)
    {
        if(!dress[i].activeInHierachy) continue; 

        _index = i;
    }


    // Or use LinQ to do the same
    _index = dress.FirstOrDefault(d => d.activeInHierarchy);
}
0 голосов
/ 17 января 2019

что должно сработать

public GameObject [] dress;

    private int _index;
    public void PreviousModel()
    {
        _index = Mathf.Clamp(_index-1,0,9);
        // code to show your model dress[_index] ...

    }

    public void NextModel()
    {
        _index = Mathf.Clamp(_index+1,0,9);
        // code to show your model dress[_index] ...

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...