Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
C# 检测3D空间中的对象是否位于/接触UI图像';界_C#_User Interface_Unity3d - Fatal编程技术网

C# 检测3D空间中的对象是否位于/接触UI图像';界

C# 检测3D空间中的对象是否位于/接触UI图像';界,c#,user-interface,unity3d,C#,User Interface,Unity3d,我有一个正方形的目标设置在屏幕的中间,这是一个UI图像现在我想检测敌人(在这里用粉色框显示)是否在这个目标框内,但如果只有一部分敌人在目标框内,这一点非常重要。 到目前为止,我发现我无法使用(如果我有问题,请纠正我) 错误): 中屏的光线投射,因为这样你就必须直接瞄准目标 敌人 Boxcast,因为它仅在目标光线投射点创建长方体 从敌人到屏幕的光线投射,探测屏幕点上的物体, 因为射线是从敌人中间发射的 Spherecast,因为它不是一个盒子,因此不可靠 使用具有巨大长度的长方体对象(带碰撞器

我有一个正方形的目标设置在屏幕的中间,这是一个UI图像现在我想检测敌人(在这里用粉色框显示)是否在这个目标框内,但如果只有一部分敌人在目标框内,这一点非常重要。

  • 到目前为止,我发现我无法使用(如果我有问题,请纠正我) 错误):
  • 中屏的光线投射,因为这样你就必须直接瞄准目标 敌人
  • Boxcast,因为它仅在目标光线投射点创建长方体
  • 从敌人到屏幕的光线投射,探测屏幕点上的物体, 因为射线是从敌人中间发射的
  • Spherecast,因为它不是一个盒子,因此不可靠
  • 使用具有巨大长度的长方体对象(带碰撞器)进入 屏幕,因为从视觉上看,它不会保留aimbox的大小 形象
我曾经考虑过使用屏幕上的几个光线投射,使用aimbox图像位置3、6、9、12点钟的起点以及UI aimbox图像的角点和中点。但这似乎是一个非常不可靠的解决方案

这是我试图实现的一个图像


我需要检测aimbox UI图像中的所有框和部分框。

SphereCast并不不可靠,因为它是一个球体,而不是一个框(,但因为您试图对由二维横截面定义的透视体进行投射。我能想到的最好办法是a,但是,正确计算平截头体平面将很困难。@Draco18s哦,不,我不是说SphereCast一般不可靠,但在我的情况下,球体的形状会使瞄准不可靠。anyway。在对平截头体进行了简短的阅读后,我可能会使用它。我猜从近到远的剪裁平面绘制一个长方体,然后将所有碰撞器放在这个长方体中。我猜最大的问题是计算aimbox的4个角,然后利用它们。这就是为什么我说BoxCast存在(它的形状是正确的)。;)但是是的,Fustam测试应该可以工作,这是一个计算问题。我做过一次数学计算,但它是基于一个假设的相机组件连接到一个任意的游戏对象,所以有一些假设(例如视野)而不是使用已知的点。这仍然是可行的,虽然。对。但据我所知,通过测试boxcast,它将在光线投射的命中点处创建一个盒子,因此,如果aimbox中只有部分敌人,那么光线点仍将错过敌人,而来自boxcast的盒子将远远落后于敌人,因此e根本没有击中它。或者我用错了吗?那是不正确的。BoxCast(和SphereCast以及其他类似的方法)是一种体积光线投射。也就是说,“光线”有厚度,会与只部分进入体积的物体发生碰撞。CapsuleCast是专为检查播放器(或其他移动实体)是否存在而设计的可以沿投射方向移动(即不会与墙、天花板、地板、其他实体等发生碰撞)。不同的形状是要投射的形状(长方体、球体、胶囊)。