我应该如何检测近距离的物体以进行交互?

时间:2016-01-07 20:20:40

标签: c# unity3d

我一直试图让Unity3d中的角色与她面前的物体互动。在尝试了多种解决方案并且对它们越来越熟悉之后我就迷失了。

我尝试使用连接到&的触发器对撞机。在她面前,然而触发器根据哪个物体移动而产生问题。如果触发器本身正在移动并导致对象不再在其范围内,则通常不会调用OnTriggerExit。如果我没有弄错,如果触发器中的对象被破坏,则会出现同样的问题。

如果触发器位于她正在与之交互的对象上,那么她可能会面向后方并仍然与之交互。静止物体上的触发器也必须是物体每一侧的一个区域,因此她可以与物体相邻而不实际面对它或非常接近。

Raycast似乎是一个很好的解决方案,但它们当然非常狭窄。想知道我是否遗漏了任何东西。

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

2 个答案:

答案 0 :(得分:2)

由于您注意到RayCast可能有点狭窄,我的建议是在播放器前使用Physics.SphereCast()。它不是沿着一条线检查,而是基本上沿着指定的方向检查类似于胶囊的空间。

该方法使用与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.
}

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

答案 1 :(得分:1)

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

我认为这可以解决您的问题。并查看此页面以获取此方法的参考。

http://docs.unity3d.com/ScriptReference/Physics.BoxCast.html

http://docs.unity3d.com/ScriptReference/Physics.SphereCast.html