我一直试图让Unity3d中的角色与她面前的物体互动。在尝试了多种解决方案并且对它们越来越熟悉之后我就迷失了。
我尝试使用连接到&的触发器对撞机。在她面前,然而触发器根据哪个物体移动而产生问题。如果触发器本身正在移动并导致对象不再在其范围内,则通常不会调用OnTriggerExit。如果我没有弄错,如果触发器中的对象被破坏,则会出现同样的问题。
如果触发器位于她正在与之交互的对象上,那么她可能会面向后方并仍然与之交互。静止物体上的触发器也必须是物体每一侧的一个区域,因此她可以与物体相邻而不实际面对它或非常接近。
Raycast似乎是一个很好的解决方案,但它们当然非常狭窄。想知道我是否遗漏了任何东西。
感谢您对最佳选择的任何帮助或意见。
答案 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