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);
}
}
}