我不明白(语句中的表达式只能由它们的副作用执行)在我的代码中意味着什么

I do not understand what (Expressions in statements must only be executed by their side effects) means in my code

#pragma strict
var lifetime = 5.0; //lifetime of projectile
var explosion : GameObject; //explosion prefab
var counter : int = 0; //keeps track of player score
var scoreToWin : int = 20; //determines score for player to win
var col : Collider; 

void; OnTriggerEnter(Collider, col);
     {
     //triggers collision on enemy tag
     if(col.gameObject.tag == "Enemy")
     {
       Score();     
       Debug.Log("Score!");
       Destroy(col.gameObject);
    //destroys enemy object
        var explo = Instantiate(explosion, transform.position, Quaternion.identity);
 //destroy the projectile that just caused the trigger collision
    Destroy(explo, 3); // delete the explosion after 3 seconds
 Destroy(gameObject,lifetime);
     }
}

function update()
{
guiText.text = "Score: "+counter;

}

function Score()
{
counter++;
    if (counter == scoreToWin);
            "setTimeout(10000, 5000)";
            Debug.Log (" You Win");
            Application.Quit;
}

Picture of Code

经过一些研究后,我发现错误意味着代码行没有执行任何操作。我不明白那怎么可能。只要我的碰撞、超时、app.quit的逻辑是正确的。我也在尝试找到一种方法将我的 guiText 实现到屏幕上供玩家查看

您的 semi-colons(语句终止符)似乎太多了。

尝试改变这个:

if (counter == scoreToWin);
        "setTimeout(10000, 5000)";
        Debug.Log (" You Win");
        Application.Quit;

为此:

if (counter == scoreToWin)
{
        setTimeout(10000, 5000);
        Debug.Log (" You Win");
        Application.Quit;
}

此函数定义中的类似问题:

void; OnTriggerEnter(Collider, col);

有一些问题,但最主要的是您在错误的地方使用了 semi-colons。他们在这里:

void; OnTriggerEnter(Collider, col); // Two incorrect semi-colons. Incorrect comma.

// Further down:

if (counter == scoreToWin); // Incorrect semi-colon
        "setTimeout(10000, 5000)"; // What's this expected to do?
        Debug.Log (" You Win"); // OK
        Application.Quit; // Quit is a method

修复

你的意思可能是:

void OnTriggerEnter(col : Collider)
{
 // ...

if(counter == scoreToWin)
{
    Debug.Log("You Win");
    Application.Quit();
}

我该如何使用 ;?

; 表示 语句结束 并且当该语句具有 (大括号)时不使用. void Hello(){} 一个语句 ,但是它有花括号,所以不需要 semi-colon。 var score=5; 是一个没有大括号的语句,所以在最后使用 semi-colon。

范围界定

您似乎习惯使用 Python 之类的东西,其中缩进也代表范围。 C# 和 UnityScript ("javascript") 与那些语言不同。

if(score == max)
{
   // Don't forget those curly brackets!
   // Everything that happens when the score is 'max' goes in here.
}

但是,有些情况下不需要这些大括号 - 这是 隐式大括号:

if(score == max)
    doSomething(); // *only* this line runs if score is max. Watch out!
    Debug.Log("No matter what score is, this shows up!");

当隐含括号时,当 if 为真时,仅运行其后的第一行。

如果你没有把 semi-colon 放在那里,你可能会很困惑为什么 debug.log 一直出现,所以我建议 always 使用大括号 - 至少在您对这门语言有信心之前。

问题是:

  • void; 什么都不做,它是一个保留字,不能单独使用。
  • "string literal" 什么都不做,你必须把它赋给一个变量或者至少用它做点什么
  • functionname 什么都不做,你必须在最后用 () 调用它。

这就是您的 JS 暗示者所抱怨的。