答案 0 :(得分:3)
第三个参数使用out hit。但提示显示应该是 距离,并且实际上有效。为什么?
1 。第三个参数不是out hit
。这取决于所使用的方法重载。
Raycast
函数有大约 16 个方法重载,这意味着通过向它们提供不同的参数,可以使用大约16种不同的方法。您是Unity的新手,但是C#编程语言比Unity有更多的作用。如果您不知道什么是方法重载,请阅读this帖子。
在您的问题示例中,这是您正在使用的重载:
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);
请注意,最后一个参数是maxDistance
而不是layerMask
。要使用最大距离和图层蒙版,请使用此参数,应为Physics.Raycast(transform.position, rayDirection, out hit, distance, layerMask)
,下面是该参数的重载:
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask);
这些是Raycast
函数的其他可用重载:
public static bool Raycast(Ray ray);
public static bool Raycast(Vector3 origin, Vector3 direction);
public static bool Raycast(Ray ray, float maxDistance);
public static bool Raycast(Ray ray, out RaycastHit hitInfo);
public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo);
public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance);
public static bool Raycast(Ray ray, float maxDistance, int layerMask);
public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance, int layerMask);
public static bool Raycast(Ray ray, [DefaultValue("Mathf.Infinity")] float maxDistance, [DefaultValue("DefaultRaycastLayers")] int layerMask, [DefaultValue("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);
public static bool Raycast(Vector3 origin, Vector3 direction, float maxDistance, int layerMask);
public static bool Raycast(Ray ray, out RaycastHit hitInfo, [DefaultValue("Mathf.Infinity")] float maxDistance, [DefaultValue("DefaultRaycastLayers")] int layerMask, [DefaultValue("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask);
public static bool Raycast(Vector3 origin, Vector3 direction, [DefaultValue("Mathf.Infinity")] float maxDistance, [DefaultValue("DefaultRaycastLayers")] int layerMask, [DefaultValue("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, [DefaultValue("Mathf.Infinity")] float maxDistance, [DefaultValue("DefaultRaycastLayers")] int layerMask, [DefaultValue("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction);
我无法通过原点和方向参数来新建
Ray
类。
2 。您无法使用Ray
类,因为您创建了一个名为Ray
的脚本。这个Ray
类没有构造函数。 Unity已经有一个名为Ray的API,我敢肯定这就是您要使用的。请勿使用任何Unity API为脚本命名相同的名称。如果这样做,它将不知道要使用哪个(您的Ray类或Unity的Ray
类)。
您有两个选择:
A 。将您的Ray
类重命名为其他
B 。通过提供Unity的Ray
类命名空间(即Ray
,让编译器知道您要使用Unity的UnityEngine
类而不是您自己的类
RaycastHit hit;
int layerMask = 1 << LayerMask.NameToLayer("LayerName"); ;
float distance = 100;
UnityEngine.Ray ray = new UnityEngine.Ray(transform.position, transform.forward);
if (Physics.Raycast(ray, out hit, distance, layerMask))
{
}
答案 1 :(得分:1)