我不明白(语句中的表达式只能由它们的副作用执行)在我的代码中意味着什么
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 暗示者所抱怨的。
#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 暗示者所抱怨的。