using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class TopicSpawn : MonoBehaviour
{
public TextMeshProUGUI topicText;
public string[] allTopics = new string[9];
public string winText;
private int topicIndex;
// Start is called before the first frame update
void Start()
{
topicIndex = Random.Range(0, 8);
GameObject persistantObj = GameObject.FindGameObjectWithTag("PersistentObj") as GameObject;
winText = persistantObj.GetComponent<PersistenceScript>().winText;
public GameObject cards = GameObject.FindGameObjectWithTag("CardPosition");
}
}
Выше приведен мой код, и из сообщения об ошибке можно сделать вывод, что фигурные скобки } где-то отсутствуют. Однако мне трудно найти, куда добавить }. Направляющие пары скобок моего редактора VSCode также почему-то не показывают пунктирную линию для метода запуска. Кто-нибудь знает, как я могу это исправить? Спасибо.
Пожалуйста, прочтите минимальный воспроизводимый пример. Требуется ли какой-либо метод Update для воспроизведения проблемы? Нет. Его не следует включать.





Ошибка не в какой-то скобке. Вы объявляете переменные карты внутри Start() и вызываете их в Update(). Сначала объявите переменную снаружи как глобальную, как вы делаете с другими, и инициализируйте ее внутри Start().
Привет, Пабло! Вы можете оставить комментарий, если не уверены на 95 %, что получили правильный ответ. Пожалуйста, не давайте предположений в качестве ответа.
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Хорошо, извини, это просто мой способ говорить, но я отредактирую его, чтобы слова были более осторожными. Я имею в виду, я уверен, что ошибка была именно в этом.
Вам просто нужно поменять местами эти две строки:
public GameObject cards = GameObject.FindGameObjectWithTag("CardPosition");
}
Код должен быть:
void Start()
{
topicIndex = Random.Range(0, 8);
GameObject persistantObj = GameObject.FindGameObjectWithTag("PersistentObj") as GameObject;
winText = persistantObj.GetComponent<PersistenceScript>().winText;
}
public GameObject cards = GameObject.FindGameObjectWithTag("CardPosition");
// Update is called once per frame
void Update()
{
topicText.text = allTopics[topicIndex];
вам следует переместить объявление cards непосредственно в свой класс и создать его экземпляр в своей Start-функции.
public class TopicSpawn : MonoBehaviour
{
public GameObject[] catCards = new GameObject[9];
public GameObject[] hamsterCards = new GameObject[9];
public GameObject[] dogCards = new GameObject[9];
public GameObject[] rabbitCards = new GameObject[9];
public GameObject cards;
public TextMeshProUGUI topicText;
public string[] allTopics = new string[9];
public string winText;
private int topicIndex;
// Start is called before the first frame update
void Start()
{
topicIndex = Random.Range(0, 8);
GameObject persistantObj = GameObject.FindGameObjectWithTag("PersistentObj") as GameObject;
winText = persistantObj.GetComponent<PersistenceScript>().winText;
cards = GameObject.FindGameObjectWithTag("CardPosition");
}
}
Если термины «объявление» и «создание экземпляра» вам незнакомы, возможно, вам будет полезно прочитать этот пост: https://stackoverflow.com/a/32291033/2528063
Кажется, вы случайно попытались объявить поле и присвоить ему значение внутри своего метода Start().
void Start()
{
...
public GameObject cards = GameObject.FindGameObjectWithTag("CardPosition");
}
Это недействительно.
Вместо этого вам следует объявить это поле отдельно вместе с другими полями, чтобы оно было доступно позже в вашем коде.
public GameObject[] catCards = new GameObject[9];
public GameObject[] hamsterCards = new GameObject[9];
public GameObject[] dogCards = new GameObject[9];
public GameObject[] rabbitCards = new GameObject[9];
public GameObject cards;
А затем инициализируйте его отдельно в Startup()
void Start()
{
...
cards = GameObject.FindGameObjectWithTag("CardPosition")
}
winText = persistantObj.GetComponent<PersistenceScript>().winText;
public GameObject cards = GameObject.FindGameObjectWithTag("CardPosition");
Вам следует удалить ключевое слово public
public GameObject cards...внутри функции неверно. Локальные переменные не имеют спецификаторов доступа.