c# - 为什么在给定原点坐标和目标坐标时,Unity 会以错误的方向绘制光线?
问题描述
我正在制作一个游戏,我正在编写一个脚本来防止相机穿过墙壁。(白色)射线正在检查碰撞。它应该从主角到相机,但它走向另一个方向,与给定的方向完全不同。此外,当我移动主角时,光线的角度也会移动。
我试图将我的目的地坐标更改为:
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);
}
我希望光线只检查主角和相机之间的碰撞体,比如直线。
解决方案
您应该使用Debug.DrawLine
,因为您使用的是 start location 和destination。
注意:该Debug.DrawRay
函数使用起始位置和方向作为其前两个参数,并且不能指定长度(它将永远存在)。如果您有两个位置,A
并且B
想在它们之间绘制一条射线,则需要获取绘制射线的方向:
Vector3 A;
Vector3 B;
Vector3 direction = (B - A).normalized;
Debug.DrawRay(A, direction);
也是如此Physics.RayCast
。当您应该使用方向时,您使用目的地作为第二个参数。
推荐阅读
- google-cloud-functions - Google Cloud Function 错误“OperationError:code=3,message=Function failed on loading user code”
- jquery - 如何在保持单击的启用的同时禁用分组复选框?
- java - 如何将 X 天数添加到当前日期和格式为 UTC
- java - 比较密码
- python - 列表理解如何在此代码块中工作?
- vba - VBA 用户表单现在显示在 excel 2016 的快速访问工具栏中
- c++ - 使用 C++ 中的任何嵌套循环显示某个数字模式
- azure - 抛出异常:Microsoft.Extensions.DependencyInjection 中的“System.InvalidOperationException”
- android - 应用程序Android Studio中的语言没有改变
- javascript - Javascript 日期解析在 Chrome 中返回奇怪的结果