#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;
}