【问题标题】:Unity click an object behind other using RaycastUnity使用Raycast单击其他对象后面的对象
【发布时间】:2018-08-20 23:11:26
【问题描述】:

这样的问题很多,但我没有找到有效的解决方案。

我想点击碰撞器后面的对象,这是我的代码:

    void Update () {
    RaycastHit hit;
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

    if (Physics.Raycast(ray, out hit))
    {
        Debug.Log(hit.transform.name);
    }
}

我将此代码放在附加到第一个对象的脚本中,但永远不会调用调试日志。 有什么想法吗?

【问题讨论】:

  • 这应该可以了...等等,等等,您使用的是 2D 物理对象吗?
  • 据我所知,这只有在前景对象位于单独的图层上时才可行,然后可以被光线投射忽略。
  • 但是为什么,你为什么要这样做?另一个对象后面是什么类型的对象。如果我们了解您这样做的原因,您的问题的答案可能很容易,因为这可能是另一种实现方式。
  • @Programmer 我正在使用一个大球体对撞机(激活 isTrigger)来查看敌人何时进入特定区域,我的问题是它有效但是当我尝试单击我击中的对象时对撞机(所以我的问题是,我怎么能忽略第一个对撞机?)无论如何,xFL 给了我一个非常好的解决方案
  • @Draco18s 只是出于好奇,为什么二维对象可能是个问题?

标签: unity3d 2d-games raycasting gameobject


【解决方案1】:

如果我理解你的问题,你想点击黄色球体(见图)并想要白色立方体的名称吗?

有两种可能的方法来做到这一点:

1.忽略光线投射层

你可以给黄色球体统一标准层“忽略光线投射”:

那么你的代码应该可以工作(我添加了鼠标左键)

    void Update()
{
    if (Input.GetMouseButtonDown(0)) // Click on left mouse button
    {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hit))
        {
            Debug.Log(hit.transform.name);
        }
    }
}

2。使用图层蒙版

见:Using Layers and Bitmask with Raycast in Unity

如果这不是您要查找的内容,请提供更多信息和问题的屏幕截图。

【讨论】:

  • 我实现了第一个解决方案,它无需代码即可工作,它只是忽略了我对第一个对象的点击。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多