Ruk*_*uku 0 c# unity-game-engine
嘿哟,对 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等)时==,运算符(默认情况下)仅检查两个操作数(它们是引用)是否指向内存中的同一个对象(几乎但不完全是指针比较)即使转换为不同的引用类型,也必然意味着类型是相同的:
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) 值时,不需要 doif( boolValue == true )或if( !(boolValue == true) )or if( boolValue == false ),可以执行if( boolValue )and 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;
    }
}
| 归档时间: | 
 | 
| 查看次数: | 434 次 | 
| 最近记录: |