Unity raycast 未检测到之前已检测到的对象

Posted

技术标签:

【中文标题】Unity raycast 未检测到之前已检测到的对象【英文标题】:Unity raycast not detecting an object which has already been detected by it before 【发布时间】:2020-11-14 00:47:04 【问题描述】:
using UnityEngine;

public class Shoot: MonoBehaviour



public Camera cam;

void Update()

    if (Input.GetButtonDown("Fire1"))
    
        shooot();
    


void shooot()

    RaycastHit hit;
    if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hit))
    
        Debug.Log(hit.transform.name);
    

其他对象有一个盒子碰撞器和刚体。 Raycast 检测到“Cube1”,并且在我对其他物体进行 raycast 拍摄然后再次在“Cube1”处拍摄 raycast 之后,此代码没有检测到它。为什么?

【问题讨论】:

您尝试debugging your code 并查看该方法是否已执行?如果你说它没有检测到它……它是检测到其他东西还是什么也没检测到? 我正在使用 Probuilder 构建我的环境。我认为这就是问题所在。我确实尝试调试我的代码。如果我对已经检测到的东西进行光线投射,它不会打印任何东西。谢谢! 不,不是probuilder造成的。我查过了! 如果调试显示什么都没有打印,下一个调试是添加行 debug.log("shooot was called");就在shoot()的函数调用之前;因为输入可能有问题? 能否在测试结束时显示完整的控制台输出? 【参考方案1】:

在 Unity 编辑器的控制台中按折叠以切换打印和日志应堆叠(折叠)的位置,它仍应记录两次,但右侧的计数器不会显示为两个单独的日志,而是增加显示有多少记录相同的相同行的次数。

【讨论】:

【参考方案2】:

Unity 会记录所有内容。只是如果您多次记录相同的输出,Unity 会折叠成一行。您可以通过输出右侧指示的数字看到这一点。

(图片取自https://learn.unity.com/tutorial/introduction-to-the-console-window#5f68b4eeedbc2a002022b83d)

如果您切换标记的“折叠”按钮,它将显示每个输出。

【讨论】:

以上是关于Unity raycast 未检测到之前已检测到的对象的主要内容,如果未能解决你的问题,请参考以下文章

Unity (C#) - 如何在销毁/重生系统中挑选出被 Raycast 检测到的 GameObject

Raycast 未检测到自定义 Unity UI 按钮脚本

Unity 射线检测(RayCast)

Unity Physics.Raycast 似乎无法正确检测到它击中的对象

unity检测玩家自动开火

Unity3D_(API)射线检测