从一个对象到另一个对象的光线投射

时间:2018-05-14 12:03:44

标签: unity3d

我正在尝试将光线从一个物体投射到另一个物体,但它无法正常工作。

结果:

enter image description here

选定的对象是“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位置:

enter image description here

3 个答案:

答案 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 中的方向参数是全局空间中的向量。 因此,您的光线总是或多或少地指向原点。

抱歉,我的回答是错误的。