RaycastHit2D不会与具有Collider2D的对象发生碰撞

时间:2017-06-01 03:14:42

标签: c# unityscript unity2d

我正在努力让我的第一场比赛基于抢夺鱼,这是基于Raycast和Colliders。我复制了一些代码并对其进行了一些修改,但似乎当我启动Ray时,它不会与鱼碰撞  (GameObjectCollider2DNULLHit.ColliderGameObject。我有一个包含脚本的GameObject,从中可以看到Ray发射和有碰撞器的鱼。 顺便说一句,我画了一条线来证明光线到达using System.Collections; using System.Collections.Generic; using UnityEngine; public class grapplinghook : MonoBehaviour { DistanceJoint2D joint; Vector3 TargetPos; public float maxdistance; public LayerMask mask; // Use this for initialization void Start () { joint = GetComponent<DistanceJoint2D>(); joint.enabled = false; } // Update is called once per frame void Update () { if(Input.GetMouseButton(0) ) { TargetPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); TargetPos.z = 0; Vector2 TargetPos2D = new Vector2(TargetPos.x, TargetPos.y); Vector2 CurrentPos2D = new Vector2(transform.position.x, transform.position.y); RaycastHit2D Hit = Physics2D.Raycast(CurrentPos2D, TargetPos2D, maxdistance); Debug.DrawLine(transform.position, TargetPos2D, Color.black); if(Hit != null) Debug.Log("trueeeeeeeeeee"); Debug.Log(Hit.collider); Debug.Log(Input.mousePosition); if(Hit.collider){ joint.enabled = true; Debug.Log("true" + Hit.collider.gameObject.name); joint.connectedBody = Hit.collider.gameObject.GetComponent<Rigidbody2D>(); joint.distance = Vector2.Distance(transform.position, Hit.point); } } if(Input.GetMouseButtonUp(0)){ joint.enabled = false; } } } (鱼)并确实如此,但没有发生碰撞。 这是我的代码,然后是图像:

ScreenToWorldPoint()

我发现WorldPoint和Screen的坐标之间的差异与我的问题有关,我在第16分钟通过youtube上的视频:https://www.youtube.com/watch?v=eF8F5NHZoHQ&t=1246s

问题是我使用Input.mousePosition时的坐标大于count()

1 个答案:

答案 0 :(得分:0)

Physics2D.Raycast采用两个Vector2作为前两个参数:原点和方向。

原点是射线开始的点,方向是射线的射程。

你正在使用它,好像它是从A点到B点。如果你想要从A到B的Ray,你的原点应该是A点,但方向应该是B - A(因为它是计算从A到B的方向的方法。