Unity3d 我不明白(语句中的表达式只能通过其副作用执行)在我的代码中的含义

Unity3d 我不明白(语句中的表达式只能通过其副作用执行)在我的代码中的含义,unity3d,unityscript,Unity3d,Unityscript,在做了一些研究之后,我发现这个错误意味着代码行没有做任何事情。然而,我不明白这是怎么回事。只要冲突、超时和app.quit的逻辑正确。我还试图找到一种方法,将我的吉他文本实现到屏幕上,以便玩家观看看起来分号(语句终止符)太多了 尝试更改此选项: #pragma strict var lifetime = 5.0; //lifetime of projectile var explosion : GameObject; //explosion prefab var counter : int =


在做了一些研究之后,我发现这个错误意味着代码行没有做任何事情。然而,我不明白这是怎么回事。只要冲突、超时和app.quit的逻辑正确。我还试图找到一种方法,将我的吉他文本实现到屏幕上,以便玩家观看

看起来分号(语句终止符)太多了

尝试更改此选项:

#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;
}
为此:

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);
修复 你可能是说:

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 Hello(){}
一个语句,但它有花括号,因此不需要分号<代码>风险值得分=5是一个没有花括号的语句,因此在末尾使用分号

范围界定 看起来您已经习惯于使用类似Python的东西,其中缩进也表示范围。C#和UnityScript(“javascript”)与这些语言不同

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

if(counter == scoreToWin)
{
    Debug.Log("You Win");
    Application.Quit();
}
但是,有一个实例不需要这些花括号-这是隐式花括号:

如果使用括号,则当
if
为true时,仅运行括号后面的第一行

如果您没有将分号放在那里,您可能会非常困惑为什么debug.log总是出现,因此我建议始终使用大括号-至少在您对该语言有信心之前。

问题在于:

  • void什么都不做,它是一个保留字,不打算单独使用
  • “string literal”
    不起任何作用,您必须将其分配给一个变量,或者至少对其执行一些操作
  • functionname
    不做任何事情,您必须在末尾使用
    ()
    调用它

这就是你的JS提示所抱怨的。

这是打字脚本吗?请添加正确的标签。否。js。它在标签中。@DarkstDreams它实际上不是javascript——它是一种更常见的称为UnityScript的语言。对那个也要小心:)啊。。有道理。不知道为什么Unity会将其命名为js文件。当你去创建它的时候,它甚至说它是js。是的,它甚至不接近javascript(只有表面语法接近)。它甚至不符合ecma标准。我想他们这样称呼是为了吸引web开发人员。setTimeout预计会延迟应用程序在播放器上意外关闭5秒(5000毫秒),删除分号和逗号似乎只会带来(unity debug中的预期;/)方法修复确实会终止app.quit上的语法though@DarkestDreams啊,我在想C#(现在大多数人在Unity中使用C)-在这种情况下,您需要使用
OnTriggerEnter(col:Collider)
(参见更新的答案).试图同时学习两种语言开始互相渗透。现在红色信号消失了。感谢您的帮助。您是否碰巧知道延迟应用程序。退出?这样它就不会在播放器启动后立即关闭wins@DarkestDreams在团结中,有一些拖延的途径,但这是一般的途径但不要马上使用它-您应该将它放在其他方法中,并使用
startcroutine
启动它。
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!");