我是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;
}
}
通过获取索引的方式也超出了数组错误的范围,但是它似乎丝毫不影响游戏 任何解决方案将不胜感激:)
答案 0 :(得分:0)
您遇到的异常可能是由于传递给TextArea
的参数(10到14)所致。如果文本块很小,则可能没有14行。
我没有看到您如何在Unity中使用这些类,所以我猜测为什么状态不会被更新是因为您正在state
方法的两个位置设置Start
的值启用对象后,该方法仅被调用一次,并且在您的ManageStates
方法中仅被调用以处理cnt
的{{1}}值。
如果state.GetNextStates()[0]的值与加载的状态相同,则不会看到更改。