Unity3d 循环和增量在unityscript中不起作用

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

我对hit-cage函数有问题。我想让它在笼子被破坏两次之后就这样。我在顶部创建了一个变量,设置为0。我试着做+=1,但也没用。我还试着做了hitCage++并调试了它,每次点击都保持在1。我做错了什么

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);
    }
}