来自预制件的RaycastAll没有从另一个预制件中拾取碰撞器

时间:2016-03-05 19:48:30

标签: c# unity3d raycasting

我正在进行一场正在进行的格斗游戏,而且我现在卡在了RayCastAll,我不确定是什么导致了这个问题。 我有一个名为“朋克”的预制件,你可以选择另一个游戏对象作为对手。在名为“punch”的动画的第二帧(你可以在下面看到)中,我运行一个名为“PunchHit”的函数来表示拳击可能落在对手身上的确切时刻。它如下:

void PunchHit(){


        var xPos = transform.position.x;
        var yPos = transform.position.y;

        // This line renders fine, no matter the gameObjects' facing direction, so it is definitely striking in the right direction
        Debug.DrawLine(Pos1,Pos2, Color.white, 1, false);
        RaycastHit2D[] hits = Physics2D.RaycastAll(Pos1, Pos2);

        foreach(RaycastHit2D hit in hits){
            if (hit.collider != null){
                if (hit.collider.gameObject == opponent) {
                    if( hit.collider.gameObject.tag == "Fighter"){

                        var enemy = hit.collider.gameObject;
                        Debug.Log("I am " + gameObject.name + " and I hit "+hit.collider.gameObject.name);
                        enemy.GetComponent<Animator>().Play("smacked", -1,  0f);
                        enemy.GetComponent<Rigidbody2D>().AddForce(new Vector2(1500 * direction, 2500));

                        AudioSource audio = gameObject.GetComponent<AudioSource>();
                        audio.Play();
                    }
                }
            }   
            else{
            }
        }   
    }

由于一些奇怪的原因,只有一个朋克可以攻击。如果第二个朋克要增加他与第一个朋克的距离,他甚至可以在没有击中他的情况下敲击第一个朋克,这让我认为朋克将光线投射从其自身打击为撞击另一个朋克。然而,对于所有意图和目的,第二个朋克也可能不存在于第一个,它的光线根本没有注册它。 在我的physics2d设置中,我创建了2个层,称为播放器1和播放器2,甚至使用该掩码进行投射,它什么都不做。我错过了一些明显的东西,或者发动机是否只是故障?

Here you can see the problem in action

1 个答案:

答案 0 :(得分:0)

解决了!我没有意识到有一个名为Debug.DrawRay的函数。本质上,我没有意识到光线和线条的坐标不同。我为测试目的而绘制的线在局部空间中有一个特定的点,因为它是第二个参数,与drawray一样,它是一个方向。知道了这一点,我能够确定拳击的轨迹,就像之前一个朋克的拳头在完全狂野的方向上一样。