Unity 2D中的光线投射c#

时间:2014-05-26 01:43:48

标签: c# unity3d 2d raycasting

我是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;

        }
    }

有人能帮助我吗?

2 个答案:

答案 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)

  1. 像之前的代码一样调用:

    hit = Physics2D.Raycast(ray.origin,ray.direction,Mathf.Abs(deltaY),collisionMask);

  2. 此代码无用:

    if(hit!= null&amp;&amp; hit.collider!= null)     {     }

  3. 但是如果你需要在括号中输入一些逻辑 - 你不需要检查命中为null - 它总是一个对象,只需检查hit.collider