Raycast 2d 在 Unity3d 中不起作用
Raycast 2d is not working in Unity3d
我是 Unity 的新手,第二天因为简单的光线投射尝试而受阻。这是我用于光线投射的脚本:
void Update () {
Debug.DrawLine(transform.position, transform.position - transform.up);
RaycastHit2D[] hits = Physics2D.RaycastAll(transform.position, transform.position - transform.up, Mathf.Infinity);
if(hits.Length > 0)
{
Debug.Log("Hit");
}
}
我已将此脚本附加到一个正方形,并在它附近放置另一个像目标一样的正方形,还向目标添加了一个 2d 盒子对撞机。我已经禁用了 "hit itself" 功能,如下所述:
http://answers.unity3d.com/questions/756380/raycast-ignore-itself.html
执行所有这些步骤后,光线投射什么都没有命中,命中对象的碰撞器始终为空(在调试模式下检查过,控制台中也没有写入任何内容)。我画了一条调试线,它确实像屏幕截图中那样指向目标方块。
请帮我找出我做错了什么。
Physics.Raycast
适用于 3D 碰撞体,包括 Box Collider、Sphere Collider 等。他们的名字中没有二维。
Physics2D.Raycast
用于 2D 碰撞器。您需要一个 Box Collider 2D,因为这是一个 2D 对象的 Sprite 渲染器。
编辑:
根据您的编辑,问题是光线投射的方向太短。你必须将它乘以一个数字。 100的值应该没问题。
public float distance = 100f;
void Update()
{
Debug.DrawLine(transform.position, transform.position + transform.right);
RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.position + transform.right * distance, Mathf.Infinity);
if (hit.collider != null)
{
Debug.Log("hit: " + hit.collider.name);
}
}
我是 Unity 的新手,第二天因为简单的光线投射尝试而受阻。这是我用于光线投射的脚本:
void Update () {
Debug.DrawLine(transform.position, transform.position - transform.up);
RaycastHit2D[] hits = Physics2D.RaycastAll(transform.position, transform.position - transform.up, Mathf.Infinity);
if(hits.Length > 0)
{
Debug.Log("Hit");
}
}
我已将此脚本附加到一个正方形,并在它附近放置另一个像目标一样的正方形,还向目标添加了一个 2d 盒子对撞机。我已经禁用了 "hit itself" 功能,如下所述:
http://answers.unity3d.com/questions/756380/raycast-ignore-itself.html
执行所有这些步骤后,光线投射什么都没有命中,命中对象的碰撞器始终为空(在调试模式下检查过,控制台中也没有写入任何内容)。我画了一条调试线,它确实像屏幕截图中那样指向目标方块。
请帮我找出我做错了什么。
Physics.Raycast
适用于 3D 碰撞体,包括 Box Collider、Sphere Collider 等。他们的名字中没有二维。
Physics2D.Raycast
用于 2D 碰撞器。您需要一个 Box Collider 2D,因为这是一个 2D 对象的 Sprite 渲染器。
编辑:
根据您的编辑,问题是光线投射的方向太短。你必须将它乘以一个数字。 100的值应该没问题。
public float distance = 100f;
void Update()
{
Debug.DrawLine(transform.position, transform.position + transform.right);
RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.position + transform.right * distance, Mathf.Infinity);
if (hit.collider != null)
{
Debug.Log("hit: " + hit.collider.name);
}
}