Unity C#:多次更改标签的状态

时间:2020-04-26 17:40:57

标签: c# unity3d

我是unity和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();

        }
    }
}

状态类:

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 :(得分:0)

您遇到的异常可能是由于传递给TextArea的参数(10到14)所致。如果文本块很小,则可能没有14行。

我没有看到您如何在Unity中使用这些类,所以我猜测为什么状态不会被更新是因为您正在state方法的两个位置设置Start的值启用对象后,该方法仅被调用一次,并且在您的ManageStates方法中仅被调用以处理cnt的{​​{1}}值。

如果state.GetNextStates()[0]的值与加载的状态相同,则不会看到更改。