我正在制作游戏,并且正在编写脚本,以防止相机穿过墙壁。 (白色)射线正在检查碰撞。它应该从主角到摄像机,但它是朝另一个方向,与给出的方向完全不同。另外,当我移动我的主角时,射线的角度也会移动。
我试图将目的地坐标更改为:
gameObject.transform.position + New Vector3(...);
但是,结果是相似的。
bool HasHit()
{
//check if ray hits a collider
return (Physics.Raycast(gameObject.transform.position, TestForHit.transform.position, out hit));
}
void DrawLines()
{
//debug the ray (hits wrong collider)
Debug.DrawRay(gameObject.transform.position, TestForHit.transform.position);
}
我希望射线只能像直线一样检查“主要角色”和“相机”之间的对撞机。
答案 0 :(得分:3)
您应该使用Debug.DrawLine
,因为您使用的是开始位置和目的地。
注意:Debug.DrawRay
函数使用起始位置和 direction 作为其前两个参数,并且不能指定长度(它将永远存在)。如果您有两个位置A
和B
,并且想在它们之间绘制射线,则需要获取 direction 来绘制射线:
Vector3 A;
Vector3 B;
Vector3 direction = (B - A).normalized;
Debug.DrawRay(A, direction);
Physics.RayCast
也是如此。当您应该使用方向时,您将目的地用作第二个参数。