Unity3d 循环和增量在unityscript中不起作用
我对hit-cage函数有问题。我想让它在笼子被破坏两次之后就这样。我在顶部创建了一个变量,设置为0。我试着做+=1,但也没用。我还试着做了hitCage++并调试了它,每次点击都保持在1。我做错了什么Unity3d 循环和增量在unityscript中不起作用,unity3d,2d,increment,unityscript,destroy,Unity3d,2d,Increment,Unityscript,Destroy,我对hit-cage函数有问题。我想让它在笼子被破坏两次之后就这样。我在顶部创建了一个变量,设置为0。我试着做+=1,但也没用。我还试着做了hitCage++并调试了它,每次点击都保持在1。我做错了什么 function OnTriggerEnter2D(kill:Collider2D){ enemy = GameObject.FindGameObjectWithTag("enemy"); cage = GameObject.FindGameObjectWithTag("cage"); if
function OnTriggerEnter2D(kill:Collider2D){
enemy = GameObject.FindGameObjectWithTag("enemy");
cage = GameObject.FindGameObjectWithTag("cage");
if(kill.gameObject.tag == "enemy"){
Destroy(enemy);
Debug.Log("Dead It");
}
if(kill.gameObject.tag == "cage"){
for(hitCage = 0 ; hitCage > 2 ; hitCage++){
if(hitCage > 2){
Destroy(cage);
}
}
}
循环不是必需的。事实上,每次调用函数OnTriggerEnter2D时,它都会覆盖hitCage
function OnTriggerEnter2D(kill:Collider2D) {
enemy = GameObject.FindGameObjectWithTag("enemy");
cage = GameObject.FindGameObjectWithTag("cage");
if(kill.gameObject.tag == "enemy"){
Destroy(enemy);
Debug.Log("Dead It");
}
if(kill.gameObject.tag == "cage") {
hitCage++;
if(hitCage > 2) {
Destroy(cage);
hitCage = 0;
}
}
}
实际上并不需要您的循环,当有东西进入触发器时会调用OnTiggerEnter2D()。在这种情况下,你告诉你的循环在你的对象进入触发器后循环两次 要快速解决此问题,您应更改:
if(kill.gameObject.tag == "cage") {
for(hitCage = 0; hitCage > 2; hitCage++) {
if(hitCage > 2) {
Destroy(cage);
}
}
}
到。。。(未经测试)
如果你想对你似乎采用的结构进行一些建设性的批评,请阅读下面的内容。如果您正在寻找快速修复方法,那么不要太担心,但随着类和对象数量的增加,您可能会发现它很有用
看来你想让这个班管理所有的伤害和杀戮。一个更好的方法是给敌人一个健康计数器,给凯奇一个健康计数器。给它们两个公共功能,比如“takeDamage(damage:int)”。那么你给我们上的这门课可能是一颗子弹,一把剑或者其他什么。这意味着你的剑(例如)会有一个叫做“攻击伤害”的变量。然后在你的剑类中,你会有这个OnTiggerEnter2D(),它拾取进入触发器的对象,并调用类似于敌方.takeDamage(攻击伤害)的东西
然后,在你的敌人或笼子类中,你所需要的伤害就是每次受到伤害时都要检查一下,看它是否会降到0点生命值。如果是这样,那么它将被摧毁
下面是一些示例代码(未经测试,我通常使用C#,因此如果我的函数名有误,您可能需要稍微修改一两行代码)
你的敌人和笼子职业将有以下特点:
var health:int;
function Start () {
health = 1;
}
function TakeDamage(damage:int) {
//check we're not passing in a value of 0 or below
if(damage > 0) {
health = health - damage;
}
//If the enemy health is now 0
if(health <= 0) {
//Destroy the enemy
Destroy(this);
}
}
var健康:int;
函数启动(){
健康=1;
}
功能损坏(损坏:int){
//检查我们没有传入0或以下的值
如果(损坏>0){
健康=健康-损害;
}
//如果敌人的生命值现在为0
如果(Health你把HETCHIVER指定为0。然后检查0是否大于2……这不是,所以我们不执行for循环。< /P>就像我在我的问题中所说的那样,我试过了,但它不起作用。它不会破坏。你可以考虑为我们提供更多的工作。当你切换到我的代码时,发生了什么?吃得好吗?如果是这样,那不是计数,如果不是,那么计数仍然是混乱的,我们必须找出原因。如果你需要帮助,你需要付出一些努力。告诉我付出努力是不必要的。它仍然在做同样的事情,当我调试它时,每次点击它仍然显示1。它没有增加。什么时候
OnTriggerEnter2D
被解雇?我们是否确定kill.gameObject.tag
永远等于“cage”
?您是否添加了免费的日志代码以更好地了解哪里出了问题?添加我描述的日志代码:在函数日志的第一行“OnTriggerEnter2D
被解雇”在检查“cage”
日志kill.gameObject.tag=“cage”
“的if
的第一行中,然后报告您发现的内容。当我注释此部分时使用您的代码:if(hitCage>2){}一切正常,框架破坏,增量正常,它上升到1234567,以此类推,当我删除取消注释它时,hitCage保持在1,函数肯定会被调用,但它不会增加,这就是为什么我尝试循环但它不起作用
var health:int;
function Start () {
health = 1;
}
function TakeDamage(damage:int) {
//check we're not passing in a value of 0 or below
if(damage > 0) {
health = health - damage;
}
//If the enemy health is now 0
if(health <= 0) {
//Destroy the enemy
Destroy(this);
}
}
var attackDamage:int;
function Start() {
attackDamage = 1;
}
function OnTriggerEnter2D(collider:Collider2D) {
//get the gameObject that collided with us
var theCollidedObject:GameObject = collider.transform.gameObject;
if(theCollidedObject.gameObject.tag == "enemy") {
//Get the Enemy script attached to the gameObject so that we can use TakeDamage()
var enemy:Enemy = theCollidedObject.GetComponent<Enemy>();
//make the enemy take damage equal to this objects attackDamage
enemy.TakeDamage(attackDamage);
}
if(theCollidedObject.gameObject.tag == "cage") {
var cage:Cage = theCollidedObject.GetComponent<Cage>();
cage.TakeDamage(attackDamage);
}
}