【发布时间】:2018-06-29 14:57:57
【问题描述】:
【问题讨论】:
-
首先是邮政编码而不是图片。
-
对不起,我知道,但我想显示提示
【问题讨论】:
第三个参数使用 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 类命名空间,即 UnityEngine,让编译器知道您想使用 Unity 的 Ray 类而不是您自己的类。
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))
{
}
【讨论】:
Physics.Raycast 函数,然后选择“转到定义”。您会看到这些列表
【讨论】: