首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ray & Physics.Raycast构造器

Ray & Physics.Raycast构造器
EN

Stack Overflow用户
提问于 2018-06-29 05:44:14
回答 2查看 730关注 0票数 0

嗨,我是团结组织的新手。

第一个问题。

我从互联网上得到了一些示例代码,第三个参数使用out hit

但是提示显示应该是distance,而且它实际上是有效的。为什么?

第二个问题。我不能按原点和方向参数来更新Ray Class

我的统一版本2017.4。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-29 06:57:57

第三个参数使用了hit。但是提示显示应该是距离,而且它实际上起作用了。为什么?

1.The第三个参数不是out hit。这取决于所使用的方法重载。

Raycast函数有大约 16 方法重载,这意味着通过向它们提供不同的参数,大约有16种不同的方法来使用它们。您对团结是新手,但这更多地与C#编程语言有关,而不是团结。如果您不知道重载是什么方法,请阅读 post。

对于问题中的示例,这是您正在使用的重载:

代码语言:javascript
复制
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);

注意,最后一个参数是maxDistance,而不是layerMask。若要使用最大距离和图层掩码,请使用这个,即应该是Physics.Raycast(transform.position, rayDirection, out hit, distance, layerMask)及以下,这将导致重载:

代码语言:javascript
复制
public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask);

这些是Raycast函数的其他可用重载:

代码语言:javascript
复制
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类。

代码语言:javascript
复制
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))
{

}
票数 3
EN

Stack Overflow用户

发布于 2018-06-29 06:50:29

  1. https://msdn.microsoft.com/en-us/library/5dhe1hce.aspx
  2. Ray类存在于Unity中-只使用名称空间或重命名
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51095016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档