所以我做了一个小程序来测试Unity中的光线投射。 这是我的代码:(这是附在框中)
public class BoxScript : MonoBehaviour {
void Update () {
RaycastHit2D hit = Physics2D.Raycast (transform.position, -Vector3.up);
if (hit.collider.tag == "Ground") {
Debug.Log ("Érzékeltem a földet");
}
Debug.DrawRay (transform.position, -Vector2.up, Color.green);
}
}
我以为我会看到无限的绿线指向下方。它往下看,但不是无限的。如果我转动boxCollider2D它是相同的。 我无法看到调试消息。如果它是无限的,我应该看到它,因为它击中了地面物体。我是对的吗?
你可以在这里看到结果: http://i.stack.imgur.com/KXiAi.jpg
为什么不是无限的?以及如何解决这个问题?
答案 0 :(得分:0)
Debug.DrawRay()方法不会绘制无限光线。它绘制一条长度等于给定幅度的线。在这种情况下,-Vector2.up等于 - (1,0)。你的实际光线投射应该是无限长的。
您可以通过修改它来“无限地”绘制它,如
Debug.DrawRay (transform.position, -Vector2.up * Mathf.Infinity, Color.green);
或者,将Mathf.Infinity替换为非常大的数字。
答案 1 :(得分:0)
只需使用此代码
detectGround = Physics2D.Linecast (sightStart.position, sightEnd.position, 1 << LayerMask.NameToLayer("Grounds"));
Debug.DrawLine (sightStart.position, sightEnd.position, Color.green);
Debug.Drawline只在场景模式下显示而不是在游戏模式中如果你在Gizmo上它也将在游戏模式中显示 注意:您必须正确设置光线位置
答案 2 :(得分:0)
您需要将BoxCollider2D组件添加到地面对象并从框对象中移除碰撞对象并尝试使用代码。
RaycastHit2D hit = Physics2D.Raycast (transform.position, -Vector2.up * 1000.0f);
if(hit.collider != null)
{
Debug.Log ("tag" + hit.collider.tag.ToString());
if (hit.collider.tag == "Ground") {
Debug.Log ("Érzékeltem a földet");
}
}
Debug.DrawRay (transform.position, -Vector2.up * 1000.0f , Color.green);
在这种情况下,当你将BoxcCllider2D添加到你的地面时也会看到是否有警告调整对撞机的大小,这样它就不会很小。