【问题标题】:Unity - raycast is clearly colliding but does not work?Unity - 光线投射明显碰撞但不起作用?
【发布时间】:2019-03-09 01:28:50
【问题描述】:

好的,我在默认图层上有 2 个对象,我需要在光线投射碰撞时触发跳跃。我可以看到光线投射与平台相交:

这是我在平台上的对撞机:

但没有打印任何内容:

Vector3 rotation = transform.forward;

        RaycastHit hit;
        Debug.DrawRay(new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z), rotation, Color.green);
        if (Physics.Raycast(new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z), rotation, out hit, rayDistance))
        {
            print(hit.transform);
            if (hit.transform.GetComponent<Platform>() != null)
            {
                Jump(hit.transform);
            }
        }

这里有什么问题?

【问题讨论】:

  • 什么是rayDistance
  • Debug.DrawRay 的长度不一定与Physics.RayCast 的长度相同。确保它们确实在碰撞
  • @Savaria 你是什么意思?我怎样才能看到实际的光线投射是什么或它们是否发生碰撞?
  • @Immersive 1.2f
  • 光线的长度存储在两个函数中的不同变量中。在Physics.Raycast 中,它位于 maxDistance 中。在Debug.DrawRay 中是方向向量的长度。

标签: c# unity3d game-physics


【解决方案1】:

使用你的值试试这个改编自 https://docs.unity3d.com/ScriptReference/Physics.Raycast.html 的代码:

RaycastHit hit;
Vector3 startPoint = new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z);
if (Physics.Raycast(startPoint, rotation, out hit, Mathf.Infinity))
{
    Debug.DrawRay(startPoint, rotation * hit.distance, Color.yellow);
    Debug.Log("Did Hit");
}
else
{
    Debug.DrawRay(startPoint, rotation * 1000, Color.white);
    Debug.Log("Did not Hit");
}

这是我做的测试中的GIF

这只是一个测试,看看问题是否是光线距离之间的差异。

您也可以使用 Debug.DrawLine 代替,然后将终点设置为与 RayCast 中使用的距离相同。

Vector3 startPoint = new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z);
if (Physics.Raycast(startPoint, rotation, out hit, rayDistance))
{
    Debug.DrawLine(startPoint, startPoint + rotation * rayDistance, Color.green);
}
else Debug.DrawLine(startPoint, startPoint + rotation * rayDistance, Color.red);

另一个GIF 使用此代码。

如果还是不行,试试看矩阵碰撞。

不要忘记,您也可以在光线投射中使用图层蒙版。 :)

【讨论】:

    猜你喜欢
    • 2019-11-18
    • 2016-06-06
    • 1970-01-01
    • 2015-11-11
    • 2012-11-07
    • 1970-01-01
    • 2016-06-19
    • 2023-04-04
    • 2012-10-01
    相关资源
    最近更新 更多