Unity - 光线投射明显发生碰撞但不起作用?
Unity - raycast is clearly colliding but does not work?
好的,我在默认层上有 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);
}
}
这里有什么问题?
尝试使用您的值改编自 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 使用此代码。
如果还是不行,试试检查矩阵碰撞。
不要忘记您也可以在光线投射中使用图层蒙版。 :)
好的,我在默认层上有 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);
}
}
这里有什么问题?
尝试使用您的值改编自 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 使用此代码。
如果还是不行,试试检查矩阵碰撞。
不要忘记您也可以在光线投射中使用图层蒙版。 :)