【问题标题】:Raycast not hitting objects射线投射不击中物体
【发布时间】:2019-07-03 03:41:17
【问题描述】:

这就像一个马里奥游戏。玩家四处跳跃,必须收集一些物品。

问题是我的光线没有与项目盒碰撞器发生碰撞。

我需要射线知道,所以我可以摧毁玩家碰撞的正确物品。

void OnCollisionEnter2D(Collision2D colisor)
{
    if((colisor.gameObject.name == "floor" || colisor.gameObject.name == "floor2" || colisor.gameObject.name == "floor3"))
    {
        anim.SetBool("jump", false);
        anim.SetFloat("speed", 0);
    }

    if (colisor.gameObject.name == "space(Clone)")
    {
        RaycastHit hit;
        Ray ray = new Ray(player.position, transform.right);
        Debug.Log("hit1");

        if (Physics.Raycast(ray, out hit))
        {
            BoxCollider bc2d = hit.collider as BoxCollider;
            Debug.Log("hit2");

            if (bc2d != null)
            {
                Destroy(bc2d.gameObject);
            }
        }
    }
}

【问题讨论】:

  • 我几乎可以肯定这有一个重复,但Physics 不是Physics2D
  • 还要确保你的起点不在另一个对撞机内...

标签: c# unity3d


【解决方案1】:

您正在混合 3d 和 2d 物理; Physics 只会查找 3d 对象,因此您应该改用 Physics2D。如果投射在目标内部开始,此射线投射仍可能会失败,因为表面法线指向错误的方向。

还请注意,由于您已经拥有Collision2D,因此您可以直接获取otherCollider,并且首先不需要进行光线投射。

【讨论】:

  • 我想知道我是否可以这样做...谢谢伙计。
【解决方案2】:

Physics.Raycast 不适用于二维对象。相反,您需要使用Physics2D.RaycastGraphic Raycaster

Raycast2D - https://docs.unity3d.com/ScriptReference/Physics2D.Raycast.html

图形光线投射器 - https://docs.unity3d.com/eng/current/Manual/script-GraphicRaycaster.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2023-03-29
    相关资源
    最近更新 更多