Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d Unity使用光线投射单击其他对象后面的对象_Unity3d_2d Games_Raycasting_Gameobject - Fatal编程技术网

Unity3d Unity使用光线投射单击其他对象后面的对象

Unity3d Unity使用光线投射单击其他对象后面的对象,unity3d,2d-games,raycasting,gameobject,Unity3d,2d Games,Raycasting,Gameobject,像这样的问题很多,但我没有找到一个有效的解决方案 我想单击碰撞器后面的对象,这是我的代码: void Update () { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { Debug.Log(hit.transform.name); } } 我将这段

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

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

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

    if (Physics.Raycast(ray, out hit))
    {
        Debug.Log(hit.transform.name);
    }
}
我将这段代码放在附加到第一个对象的脚本中,但永远不会调用调试日志。
有什么想法吗?

如果我没弄错你的问题,你想点击黄色球体(见图)并输入白色立方体的名称吗

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

1。忽略光线投射层

您可以为黄色球体提供统一标准层“忽略光线投射”:

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

2。使用图层遮罩

见:


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

如果我正确理解您的问题,您想单击黄色球体(见图)并想要白色立方体的名称吗

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

1。忽略光线投射层

您可以为黄色球体提供统一标准层“忽略光线投射”:

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

2。使用图层遮罩

见:


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

这应该可以。。。等等,等等,你在使用2D物理对象吗?据我所知,只有当前景对象位于一个单独的层上,然后可以被光线投射忽略时,这才可行。但是为什么,为什么你要这样做?另一个对象后面是什么类型的对象。如果我们理解你为什么要这样做,答案可能很简单,因为这可能是实现它的另一种方式。@程序员我正在使用一个大球体对撞机(启动isTrigger)来查看敌人何时进入特定区域,我的问题是,这是可行的,但当我试图单击对象时,我撞到了碰撞器(所以我的问题是,我怎么能忽略第一个碰撞器?),无论如何,xFL给了我一个非常好的解决方案solution@Draco18s只是出于好奇,为什么2d对象会成为问题?这应该行得通。。。等等,等等,你在使用2D物理对象吗?据我所知,只有当前景对象位于一个单独的层上,然后可以被光线投射忽略时,这才可行。但是为什么,为什么你要这样做?另一个对象后面是什么类型的对象。如果我们理解你为什么要这样做,答案可能很简单,因为这可能是实现它的另一种方式。@程序员我正在使用一个大球体对撞机(启动isTrigger)来查看敌人何时进入特定区域,我的问题是,这是可行的,但当我试图单击对象时,我撞到了碰撞器(所以我的问题是,我怎么能忽略第一个碰撞器?),无论如何,xFL给了我一个非常好的解决方案solution@Draco18s出于好奇,为什么2d对象会成为一个问题?我实现了第一个解决方案,它不需要代码就能工作,它忽略了我对第一个对象的点击。非常感谢。我实现了第一个解决方案,它不需要代码,只需忽略我对第一个对象的点击。非常感谢。
    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);
        }
    }
}