【问题标题】:Unity Raycasthit doesn't recognized object with tagUnity Raycasthit 无法识别带有标签的对象
【发布时间】:2019-06-26 03:27:29
【问题描述】:

我的游戏中有一个对象被标记为“敌人”,它也在一个名为“敌人”的层中。它有一个BoxCollider 和一个Rigidbody 附加到它。选项IsTrigger 被激活。当我向它射击时,无法识别命中。命中直接穿过它。

我用这种方法拍摄:

void DisparaBala()
{
    RaycastHit hit;
    if(Physics.Raycast(maiCam.transform.position, maiCam.transform.forward, out hit))
    {
        print("We hit: " + hit.transform.gameObject.tag);
        if (hit.transform.tag == Tags.ENEMY_TAG)
        {
            hit.transform.GetComponent<ScriptVida>().DanoAplicado(damage);
        }
    }
}

枪是相机的孩子,相机是玩家的孩子。播放器位于名为“播放器”的层中。

有趣的是,如果我将任何其他带有“敌人”标签的对象放入,则可以正常识别命中。

我不知道该怎么办。

Screenshot

【问题讨论】:

  • 好吧,你标记为敌人并工作的对象和不工作的对象有什么不同?必须有一个。
  • Raycast 需要撞到一个对撞机,你的物体有吗?
  • @Jichael 在图片上当前选择的对象有一个,但敌人是针对下面的对象写的 - 有点难以分辨
  • 是的,它附有盒子对撞机。可以用的是默认层,但是我也试着把敌人放在这个层,但是没有用
  • 那个叫“Indio”的人是敌人。它与屏幕上显示的预制件相同。

标签: c# unity3d


【解决方案1】:

为您的 Physics.Raycast 添加图层蒙版。像这样:

void DisparaBala()
{
    RaycastHit hit;
    int layerMask = LayerMask.GetMask("Enemy");
    if(Physics.Raycast(maiCam.transform.position, maiCam.transform.forward, out hit, layerMask))
    {
        print("We hit: " + hit.transform.gameObject.tag);
        if (hit.transform.tag == Tags.ENEMY_TAG)
        {
            hit.transform.GetComponent<ScriptVida>().DanoAplicado(damage);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 2015-12-26
    • 2013-05-08
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多