预制件中的 RaycastAll 不会从另一个预制件中拾取碰撞体

本文关键字:另一个 碰撞 RaycastAll | 更新日期: 2023-09-27 18:37:28

我正在开发一款格斗游戏,目前我被困在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,即使使用该蒙版进行投射,它也没有任何作用。我是否错过了一些明显的东西,或者引擎只是出现故障?

在这里,您可以看到问题的实际应用

预制件中的 RaycastAll 不会从另一个预制件中拾取碰撞体

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