嗨,我是团结组织的新手。
第一个问题。。
我从互联网上得到了一些示例代码,第三个参数使用out hit。
但是提示显示应该是distance,而且它实际上是有效的。为什么?

第二个问题。我不能按原点和方向参数来更新Ray Class。
我的统一版本2017.4。

发布于 2018-06-29 06:57:57
第三个参数使用了hit。但是提示显示应该是距离,而且它实际上起作用了。为什么?
1.The第三个参数不是out hit。这取决于所使用的方法重载。
Raycast函数有大约 16 方法重载,这意味着通过向它们提供不同的参数,大约有16种不同的方法来使用它们。您对团结是新手,但这更多地与C#编程语言有关,而不是团结。如果您不知道重载是什么方法,请阅读这 post。
对于问题中的示例,这是您正在使用的重载:
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.You不能使用Ray类,因为您创建了一个名为Ray的脚本。这个Ray类没有构造函数。统一已经有了一个名为射线的API,我相信这就是您想要使用的。不要将脚本命名为与任何Unity相同的名称。如果您这样做了,它将不知道使用哪一个(您的雷类或统一的Ray类)。
你有两个选择:
A.Rename .Rename Ray类到其他方面
B.Let编译器知道,通过提供统一的Ray类命名空间(即UnityEngine ),您希望使用统一的Ray类而不是您自己的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))
{
}发布于 2018-06-29 06:50:29
https://stackoverflow.com/questions/51095016
复制相似问题