我是c#的新手,并试图弄清楚如何在Unity3d的新2D支持中使用光线投射。
我收到错误"无法转换为UnityEngine.Ray2D'到UnityEngine.Vector2'"
for (int i = 0; i<3; i ++) {
float dir = Mathf.Sign(deltaY);
float x = (p.x + c.x - s.x/2) + s.x/2 * i;
float y = p.y + c.y + s.y/2 * dir;
ray = new Ray2D(new Vector3(x, y), new Vector3(0, dir));
Debug.DrawRay(ray.origin, ray.direction);
hit = Physics2D.Raycast(ray.origin, ray.direction, Mathf.Abs(deltaY), collisionMask);
if (hit != null && hit.collider != null)
{
}
if (Physics2D.Raycast(ray,out hit,Mathf.Abs(deltaY),collisionMask)) {
float dst = Vector2.Distance (ray.origin, hit.point);
if (dst > skin) {
deltaY = dst * dir + skin;
}
else {
deltaY = 0;
}
grounded = true;
break;
}
}
有人能帮助我吗?
答案 0 :(得分:4)
请参阅Physics2D.Raycast
文档,该方法定义为
static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);
将参数定义为
原点:射线起源的2D空间中的点。
方向:表示光线方向的矢量。
距离:投射光线的最大距离。
layerMask:过滤器仅检测某些图层上的碰撞器。
minDepth:仅包含Z坐标(深度)大于此值的对象。
maxDepth:仅包含Z坐标(深度)小于此值的对象。
Ray2D
使用的是Vector2D
而不是origin
。如果您只是将ray
替换为Vector2D
,则可以使用
Physics2D.Raycast(new Vector2(x, y),out hit,Mathf.Abs(deltaY),collisionMask)
有关详细信息,请参阅passing parameters
答案 1 :(得分:0)
像之前的代码一样调用:
hit = Physics2D.Raycast(ray.origin,ray.direction,Mathf.Abs(deltaY),collisionMask);
此代码无用:
if(hit!= null&amp;&amp; hit.collider!= null) { }
但是如果你需要在括号中输入一些逻辑 - 你不需要检查命中为null - 它总是一个对象,只需检查hit.collider