【问题标题】:'Invalid token '=' in class, struct, or interface member declaration.' error with two lines in a unity script'类、结构或接口成员声明中的标记'='无效。'统一脚本中有两行错误
【发布时间】:2020-12-06 02:20:04
【问题描述】:

我遇到了这个错误的问题,该错误一直出现在提到的行中:spriteRenderer = GetComponent<SpriteRenderer>();selectable = GetComponent<Selectable>();

从我的统一引擎显示的错误消息是

'类、结构或接口成员声明中的标记'='无效。'

问题似乎出在这些行中的等号周围,我不明白它有什么问题。请问这方面有什么建议吗?

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

【问题讨论】:

  • 你为什么要使用break;在你的 foreach 内?还有你的 i++;必须在 foreach 内才能工作,循环中 i 的值始终为 0。

标签: c# unity3d


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2014-04-07
    • 2014-06-22
    • 2016-07-10
    相关资源
    最近更新 更多