[英]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# 是靜態類型的,大多數類型不能直接比較,因此不需要===
運算符。
此外,當比較引用類型( object
、 string
等)時, ==
運算符(默認情況下)僅檢查兩個操作數(它們是引用)是否指向內存中的同一個對象(幾乎但不完全是一個指針-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.