C# 检测3D空间中的对象是否位于/接触UI图像';界
我有一个正方形的目标设置在屏幕的中间,这是一个UI图像现在我想检测敌人(在这里用粉色框显示)是否在这个目标框内,但如果只有一部分敌人在目标框内,这一点非常重要。C# 检测3D空间中的对象是否位于/接触UI图像';界,c#,user-interface,unity3d,C#,User Interface,Unity3d,我有一个正方形的目标设置在屏幕的中间,这是一个UI图像现在我想检测敌人(在这里用粉色框显示)是否在这个目标框内,但如果只有一部分敌人在目标框内,这一点非常重要。 到目前为止,我发现我无法使用(如果我有问题,请纠正我) 错误): 中屏的光线投射,因为这样你就必须直接瞄准目标 敌人 Boxcast,因为它仅在目标光线投射点创建长方体 从敌人到屏幕的光线投射,探测屏幕点上的物体, 因为射线是从敌人中间发射的 Spherecast,因为它不是一个盒子,因此不可靠 使用具有巨大长度的长方体对象(带碰撞器
- 到目前为止,我发现我无法使用(如果我有问题,请纠正我) 错误):
- 中屏的光线投射,因为这样你就必须直接瞄准目标 敌人
- Boxcast,因为它仅在目标光线投射点创建长方体
- 从敌人到屏幕的光线投射,探测屏幕点上的物体, 因为射线是从敌人中间发射的
- Spherecast,因为它不是一个盒子,因此不可靠
- 使用具有巨大长度的长方体对象(带碰撞器)进入 屏幕,因为从视觉上看,它不会保留aimbox的大小 形象
我需要检测aimbox UI图像中的所有框和部分框。SphereCast并不不可靠,因为它是一个球体,而不是一个框(,但因为您试图对由二维横截面定义的透视体进行投射。我能想到的最好办法是a,但是,正确计算平截头体平面将很困难。@Draco18s哦,不,我不是说SphereCast一般不可靠,但在我的情况下,球体的形状会使瞄准不可靠。anyway。在对平截头体进行了简短的阅读后,我可能会使用它。我猜从近到远的剪裁平面绘制一个长方体,然后将所有碰撞器放在这个长方体中。我猜最大的问题是计算aimbox的4个角,然后利用它们。这就是为什么我说BoxCast存在(它的形状是正确的)。;)但是是的,Fustam测试应该可以工作,这是一个计算问题。我做过一次数学计算,但它是基于一个假设的相机组件连接到一个任意的游戏对象,所以有一些假设(例如视野)而不是使用已知的点。这仍然是可行的,虽然。对。但据我所知,通过测试boxcast,它将在光线投射的命中点处创建一个盒子,因此,如果aimbox中只有部分敌人,那么光线点仍将错过敌人,而来自boxcast的盒子将远远落后于敌人,因此e根本没有击中它。或者我用错了吗?那是不正确的。BoxCast(和SphereCast以及其他类似的方法)是一种体积光线投射。也就是说,“光线”有厚度,会与只部分进入体积的物体发生碰撞。CapsuleCast是专为检查播放器(或其他移动实体)是否存在而设计的可以沿投射方向移动(即不会与墙、天花板、地板、其他实体等发生碰撞)。不同的形状是要投射的形状(长方体、球体、胶囊)。