簡體   English   中英

如何修復 Unity/C# 中的 Invalid Expression Term '=' 錯誤?

[英]How do I fix an Invalid Expression Term '=' error in Unity/C#?

嘿,對 C# 不太熟悉,更不用說 Unity,而且我顯然做錯了什么,這是我的代碼,我得到的唯一錯誤是:

'無效的表達式術語“=”

    bool currentlydown;
// further up the script
void Start() {
        currentlydown = false;
    }
// later up the script
void Update() {
if ((Input.GetKeyDown("W") || Input.GetKeyDown("A") || Input.GetKeyDown("S") || Input.GetKeyDown("D")) && currentlydown === false) {
            anim.SetBool("Walking", true);
            currentlydown = true;
        } else if (!(Input.GetKeyDown("W") || Input.GetKeyDown("A") || Input.GetKeyDown("S") || Input.GetKeyDown("D")) && currentlydown === true){
            anim.SetBool("Walking", false);
            currentlydown = false;
        }
    }

任何和所有的幫助表示贊賞!

  • 您正在使用=== (我假設來自 JavaScript?)。 C# 沒有===運算符,只有==

  • JavaScript 有===是為了要求操作數的類型也嚴格相同。 C# 是靜態類型的,大多數類型不能直接比較,因此不需要===運算符。

  • 此外,當比較引用類型( objectstring等)時, ==運算符(默認情況下)僅檢查兩個操作數(它們是引用)是否指向內存中的同一個對象(幾乎但不完全是一個指針-comparison) 這必然意味着類型相同的,即使轉換為不同的引用類型:

     interface IFoobar {} class Foobar : IFoobar {}; Foobar a = new Foobar(); Object b = a; IFoobar c = a; // Even though `a` and `b` have different reference-types (`Object` vs `IFoobar`) they point to the same object in-memory, so a type-check is unnecessary. Console.WriteLine( b == c ); // "true" // Whereas with value-types you'll get a compiler error: Int32 x = 123; String y = "abc"; Console.WriteLine( x == y ); // <-- This won't compile because Int32 and String cannot be compared.
  • 因此,將您的代碼更改為使用==

  • 您還可以通過移動Input.GetKeyDown()檢查並將其存儲在本地bool isWasd來簡化邏輯並使代碼更具可讀性。

像這樣:

bool currentlydown;
// further up the script
void Start()
{
    currentlydown = false;
}

// later up the script
void Update() {

    bool isWasd = Input.GetKeyDown("W")
            ||
            Input.GetKeyDown("A")
            ||
            Input.GetKeyDown("S")
            ||
            Input.GetKeyDown("D");

    if( isWasd && currentlydown == false )
    {
        anim.SetBool("Walking", true);
        currentlydown = true;
    }
    else if ( !(isWasd) && currentlydown == true ){
        anim.SetBool("Walking", false);
        currentlydown = false;
    }
}
  • 使用bool ( System.Boolean ) 值時,您不需要執行if( boolValue == true )if( !(boolValue == true) )if( boolValue == false ) ,您可以執行if( boolValue )if( !boolValue )

像這樣:

// later up the script
void Update()
{
    bool isWasd =
        Input.GetKeyDown("W")
        ||
        Input.GetKeyDown("A")
        ||
        Input.GetKeyDown("S")
        ||
        Input.GetKeyDown("D");

    if( isWasd && !currentlydown)
    {
        anim.SetBool("Walking", true);
        currentlydown = true;
    }
    else if( !isWasd && currentlydown )
    {
        anim.SetBool("Walking", false);
        currentlydown = false;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM