Unity C#: многократное изменение состояния тегов - PullRequest
0 голосов
/ 26 апреля 2020

Я новичок в единстве и c#. Я пытаюсь сделать текстовую игру для практики. проблема в том, что в другом состоянии игры разное количество кнопок, и я хочу переключаться между ними с помощью тегов, но это работает только для первого состояния, а затем, когда я пытаюсь перейти к следующему состоянию, повернуть все кнопки

вот код:

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

public class Textadvanture0 : MonoBehaviour
{

    [SerializeField]
    Text text0;

    [SerializeField]
    Text text1;

    [SerializeField]
    Text text2;

    [SerializeField]
    Text text3;

    [SerializeField]
    Text text4;

    [SerializeField]
    State Startingstate;


    State state;

    string Flag;

    public void ManageStates(int cnt)
    {
        var nextstate = state.GetNextStates();
        if (cnt == 1) //left
        {
            state= nextstate[0];
        }
    }

    void Start()
    {
        state = Startingstate;
        FlagCheck();

    }


    void Update()
    {

       Debug.Log(state.GetChoiceN());

       FlagCheck();


        text0.text = state.GetStateStory(0);
        text1.text = state.GetStateStory(1);
        text2.text = state.GetStateStory(2);
        text3.text = state.GetStateStory(3);
        text4.text = state.GetStateStory(4);

    }


    void FlagDown()
    {
        GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag(Flag);

        foreach (GameObject go in gameObjectArray)
        {
            go.SetActive(false);
        }
    }
    void FlagOn()
    {
        GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag(Flag);

        foreach (GameObject go in gameObjectArray)
        {
            go.SetActive(true);
        }
    }

    void FlagCheck()
    {

        if (state.Choice == 1)
        {

            Flag = ("Mono Choice");
            FlagOn();

            Flag = ("Dual Choice");
            FlagDown();

            Flag = ("Triple Choice");
            FlagDown();

        }
        else if (state.Choice == 2)
        {
            Flag = ("Mono Choice");
            FlagDown();

            Flag = ("Dual Choice");
            FlagOn();

            Flag = ("Triple Choice");
            FlagDown();


        }
        else if (state.Choice == 3)
        {
            Flag = ("Mono Choice");
            FlagDown();

            Flag = ("Dual Choice");
            FlagDown();

            Flag = ("Triple Choice");
            FlagOn();

        }
    }
}

И класс State:

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

[CreateAssetMenu(menuName = "State")]
public class State : ScriptableObject
{
  [TextArea(10,14)]  [SerializeField] string[] StoryText;
  [SerializeField]
   public int Choice;
  [SerializeField]
  State [] Nextstates;



  public string GetStateStory(int Counter)
  {

      return StoryText[Counter];
  }


  public int GetChoiceN()
  {
      return Choice;
  }
  public State[] GetNextStates()
  {
      return Nextstates;
  }

}

по тому, как я получаю индекс, также выходит за пределы ошибки массива, но, похоже, это не так повлиять на игру любым способом, будет оценено любое решение:)

1 Ответ

0 голосов
/ 26 апреля 2020

Исключение, которое вы получаете, вероятно, связано с аргументами, которые вы передаете TextArea, от 10 до 14. Если у вас небольшие блоки текста, у вас может не быть 14 строк.

Не видя, как вы используете эти классы в Unity, я думаю, почему состояния не обновляются, потому что вы устанавливаете значение вашего state в 2 местах, метод Start, который вызывается только один раз после объект включен, и в вашем методе ManageStates, который предназначен только для обработки cnt значения 1.

, если значение state.GetNextStates () [0] совпадает с состоянием загруженное состояние вы не увидите изменений.

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