我正在尝试将光线从一个物体投射到另一个物体,但它无法正常工作。
结果:
选定的对象是“EnemyTank”,光线应该指向“PlayerTank”,但它不是你能看到的。
我的代码:
void FixedUpdate () {
Vector3 dir = player.transform.position - rayOrigin.transform.position;
RaycastHit hitInfo;
dir = dir.normalized;
Debug.DrawRay(rayOrigin.transform.position, dir*maxCheckDistance,Color.red);
}
player
变量指向“PlayerTank”
Playertank位置:
答案 0 :(得分:0)
根据您的说明和屏幕截图。
你想从“EnemyTank”到“PlayerTank”绘制光线。
在您的代码中,“PlayerTank”为player
,“EnemyTank”为rayOrigin
。
从“EnemyTank”到另一个方向画了一条小光线。所以你绝对不能在player
对象中定义你的“PlayerTank”。
答案 1 :(得分:0)
所以我可以看到一些问题,但直截了当:
FixedUpdate
按设定的间隔运行,不是每一帧。方法DrawRay()
具有持续时间的参数。默认情况下,它设置为0.这意味着它只对单个帧可见。您可以在一段时间内传递2个选项,或者您可以将此方法放在每个帧都运行的update
中。
void Update () {
Vector3 dir = player.transform.position - rayOrigin.transform.position;
dir = dir.normalized;
Debug.DrawRay(rayOrigin.transform.position, dir*maxCheckDistance,Color.red);
}
但是,如果您尝试从一个对象绘制一条线到另一个对象,请使用Debug.DrawLine()
Debug.DrawLine(rayOrigin.transform.position, player.transform.position, Color.red);
最后,避免使用与您的某个对象相同的线条颜色,我指的是红色立方体和红线。使用一种突出的颜色。在这种情况下说黑色。
FixedUpdate示例:
void FixedUpdate () {
Vector3 dir = player.transform.position - rayOrigin.transform.position;
dir = dir.normalized;
Debug.DrawRay(rayOrigin.transform.position, dir*maxCheckDistance,Color.red, 1.0f);
}
为了好玩,让线条使用你的maxCheckDistance值改变颜色:
void Update () {
Color lineColor = color.Black;
if(Vector3.Distance(rayOrigin.transform.position, player.transform.position) < maxCheckDistance) {
lineColor = color.White;
}
Debug.DrawLine(rayOrigin.transform.position, player.transform.position, lineColor);
}
编辑:
重要的是要知道对象的实际位置,在你的问题中你有一个Player对象,你做了2个立方体的父对象。看起来好像你将这两个立方体移动到了你想要玩家在世界的地方,而不是移动玩家对象本身。所以你的线条正确绘制,因为它正在获得玩家对象的位置,将来移动父对象而不是子对象。
答案 2 :(得分:0)
DrawRay 中的方向参数是全局空间中的向量。
因此,您的光线总是或多或少地指向原点。
抱歉,我的回答是错误的。