‘Недопустимый токен’=’в объявлении класса, структуры или элемента интерфейса.’ ошибка с двумя строками в скрипте unity

#c# #unity3d

#c# #unity3d

Вопрос:

У меня возникла проблема с этой ошибкой, которая продолжает появляться со строками, в которых упоминается: spriteRenderer = GetComponent<SpriteRenderer>(); и selectable = GetComponent<Selectable>();

Сообщение об ошибке, которое выводится из моего движка Unity, является

‘Недопустимый токен’=’ в объявлении класса, структуры или элемента интерфейса.’

Проблема, похоже, связана с одинаковыми символами в этих строках, и я не понимаю, в чем проблема с этим. Могу ли я, возможно, получить какой-либо совет по этому поводу, пожалуйста?

 void Start()
{
    List<string> deck = Solitaire.GenerateDeck();
    solitaire = FindObjectOfType<Solitaire>();

    int i = 0;
    foreach (string card in deck)
    {
        cardFace = solitaire.cardFaces[i];
        break;
    }
    i  ;
}
spriteRenderer = GetComponent<SpriteRenderer>();
selectable = GetComponent<Selectable>();

// Update is called once per frame
void Update()
{
    if (selectable.faceUp == true)
    {
        spriteRenderer.sprite = cardFace;
    }
    else
    {
        spriteRenderer.sprite = cardBack;
    }
}
  

Комментарии:

1. Почему вы используете break; в вашем foreach? также ваш i ; должен быть внутри foreach, чтобы он мог работать, значение i постоянно равно 0 в цикле.

Ответ №1:

Похоже, вы создаете два объекта, которые будут использоваться в методах вашего класса. Вам нужно создать поле для этого в вашем классе (C # — строго типизированный язык, и вам нужно объяснить компилятору, чего вы пытаетесь достичь). В случае локальных переменных вы можете использовать var ключевое слово, но для полей вам нужно объявить полный тип, вот так:

 private SpriteRenderer _spriteRenderer = GetComponent<SpriteRenderer>();
private Selectable _selectable = GetComponent<Selectable>();
  

Однако лучшим решением будет переместить это внутри вашей функции Update :

 // Update is called once per frame
void Update()
{
    var spriteRenderer = GetComponent<SpriteRenderer>();
    var selectable = GetComponent<Selectable>();

    if (selectable.faceUp == true)
    {
        spriteRenderer.sprite = cardFace;
    }
    else
    {
        spriteRenderer.sprite = cardBack;
    }
}
  

Также вы удаляете сравнение с true :

 // Update is called once per frame
void Update()
{
    var spriteRenderer = GetComponent<SpriteRenderer>();
    var selectable = GetComponent<Selectable>();

    if (selectable.faceUp)
    {
        spriteRenderer.sprite = cardFace;
    }
    else
    {
        spriteRenderer.sprite = cardBack;
    }
}
  

Или с использованием тернарного оператора

 // Update is called once per frame
void Update()
{
    var spriteRenderer = GetComponent<SpriteRenderer>();
    var selectable = GetComponent<Selectable>();
    spriteRenderer.sprite = selectable.faceUp ? cardFace : cardBack;
}