好吧,我在Default层上有2个对象,当raycast发生碰撞时,需要使用它们触发跳转。我可以看到raycast与平台相交:
这是我在平台上的对撞机:
但没有打印任何内容:
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);
}
}
这是怎么了?
答案 0 :(得分:2)
尝试使用您的值改编自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使用此代码。
如果仍然不起作用,请尝试检查矩阵冲突。
别忘了,您还可以在光线投射中使用图层蒙版。 :)