首页 > 解决方案 > Unity 3D Raycast 没有朝着正确的方向发展

问题描述

我写了一些代码,应该从游戏对象的肩部发出光线投射并通过游戏对象的手。这是为了给出鼠标的方向,如果我的角色拿起一个物品,他们可以在那个方向使用那个物品,即朝那个方向射击。目前我只有它绘制演员表来调试它,因为演员表从正确的位置发射但不通过手。我根据上一个问题的答案尝试了此代码的多次迭代,但它似乎不起作用。游戏是一个2.5D横向卷轴。

    pos.x = transform.position.x;
    pos.y = transform.position.y -1.4f;
    pos1.x = shoulder.transform.position.x;
    pos1.y = shoulder.transform.position.y;
    pos1.z = 15f;
    pos.z =0f;
    RaycastHit info;
    Debug.DrawRay(pos1, pos, Color.yellow);

代码在手游戏对象上,当我从原点移动宪章时它也会做一些奇怪的事情,比如翻转方向并且只旋转一半并且不会向相反方向发射光线投射。

标签: c#unity3d3draycasting

解决方案


从您之前拥有的向量开始:

// Hand
pos.x = transform.position.x;
pos.y = transform.position.y -1.4f;
pos.z = 0f;

// Shoulder
pos1.x = shoulder.transform.position.x;
pos1.y = shoulder.transform.position.y;
pos1.z = 15f;

从肩向量中减去手向量,得到两点之间的距离(或增量)。

Vector3 dir = pos1 - pos;

// For bonus point you can set the length of the ray by using dir as a unit vector
public float length;

dir = dir.normalized * length;

最后将肩部的位置和包含光线方向和长度的新方向向量提供给函数。

Debug.DrawRay(pos1, dir, Color.yellow);

推荐阅读