Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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/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
C# 我应该如何检测近距离的对象以进行交互?_C#_Unity3d - Fatal编程技术网

C# 我应该如何检测近距离的对象以进行交互?

C# 我应该如何检测近距离的对象以进行交互?,c#,unity3d,C#,Unity3d,我一直在努力让我在Unity3d中的角色与她面前的物体互动。在尝试了多种解决方案并更加熟悉它们之后,我迷路了 我曾尝试在她面前使用一个触发器碰撞器,但是触发器会根据移动的对象产生问题。如果触发器本身正在移动并导致对象不再在其边界内,则通常不会调用OnTriggerExit。如果我没有弄错的话,如果触发器中的对象被破坏,同样的问题也会发生 如果触发器在她正在与之交互的对象上,那么她可能会向后,并且仍然与之交互。静止物体上的触发器也必须是物体两侧的一个区域,这样她就可以与物体相邻,而不需要实际面对它

我一直在努力让我在Unity3d中的角色与她面前的物体互动。在尝试了多种解决方案并更加熟悉它们之后,我迷路了

我曾尝试在她面前使用一个触发器碰撞器,但是触发器会根据移动的对象产生问题。如果触发器本身正在移动并导致对象不再在其边界内,则通常不会调用OnTriggerExit。如果我没有弄错的话,如果触发器中的对象被破坏,同样的问题也会发生

如果触发器在她正在与之交互的对象上,那么她可能会向后,并且仍然与之交互。静止物体上的触发器也必须是物体两侧的一个区域,这样她就可以与物体相邻,而不需要实际面对它或非常靠近它

光线投射似乎是一个很好的解决方案,但它们当然非常狭窄。不知道我是否错过了什么


感谢您对最佳选项的任何帮助或意见。

由于您注意到光线投射可能有点窄,我的建议是在播放器前面使用。它不是沿着直线检查,而是沿着指定方向在胶囊状空间中检查

该方法使用的语法与
Physics.RayCast()
非常相似。下面是一个示例用法:

Vector3 origin = transform.position;
float sphereRadius = 1.0f; // Change this as needed depending on tolerance you want
Vector3 direction = transform.forward;
RaycastHit hitInfo;
float maxCastDist = 5.0f; // Change this as needed depending on how close the object must be for interaction

if (Physics.SphereCast(origin, sphereRadius, direction, out hitInfo, maxCastDist)){
    // Logic for checking whether object hit is interactable, etc using hitInfo.
}

希望这有帮助!如果您有任何问题,请告诉我。

Raycast是一个很好的解决方案,但它们非常狭窄。但不是BoxCast。可以从方向上的某个位置发送长方体光线。设置盒子的大小。认为它像来自角色的太多平行光线。 另一方面,还有SphereCast。你应该选择哪个更适合你的计划

我认为这解决了你的问题。并在本页中查找此方法的引用


只是一个想法,因为我只有一点游戏开发经验,但也许它看起来像是应用于角色的第二个碰撞检测对话框?所以你会有一个角色的点击箱,然后你会有一个第二个点击箱,就像一个巨大的,不可见的球体围绕着她,你可以用它来触发“接近”事件?谢谢你的评论。这是我在第二段中提到的。这个问题源于统一的触发器或多或少是静止的。如果某些对象移动,而另一个对象不移动,则可能不会调用Enter、Exit等方法。我想知道我是否缺少一个关于触发器的解决方案,是否有一个关于光线投射的解决方案基本上是线而不是框区域,或者是否有一个完全独立的解决方案。我认为你使用触发器是正确的。有点不清楚你的设置是什么,你所说的“触发器根据移动的对象产生问题”是什么意思。谢谢。为了澄清为什么触发器对我不起作用而编辑。我从来不知道SphereCast的存在+1.