使用raycast命中信息将游戏对象居中

时间:2019-01-10 06:55:35

标签: c# unity3d

我正在构建一条可步行的路径,该路径由游戏对象(胶囊)使用射线投射向下检查,每个立方体都有一个方向,以正确的方式移动胶囊。问题是胶囊立即移动,射线投射击中了立方体,因此胶囊沿着边缘但居中移动。

这是我使用的代码

RayDirection = (direction) => new Ray(transform.position, direction);

if (Physics.Raycast(RayDirection(-transform.up), out RaycastHit hit, 1.5f, 1 << 9))
{
    switch (hit.transform.GetComponent<Path>().path)
    {
        case Path.Forward:
            transform.position += Vector3.forward / 50;
            break;
        case Path.Back:
            transform.position += Vector3.back / 50;
            break;
        case Path.Right:
            transform.position += Vector3.right / 50;
            break;
        case Path.Left:
            transform.position += Vector3.left / 50;
            break;
    }
}

1 个答案:

答案 0 :(得分:0)

您可以让它们包含出口位置,而不是让路径元素包含方向。可以在设计器中通过一个空对象设置此值,也可以在初始化路径对象时进行计算。

然后在射线投射中,您可以获取该出口位置并将角色朝该方向移动。

在查看时,您似乎在使用“ / 50”来减慢运动速度。这可以通过向角色添加Speed变量(以米/秒为单位)来完成。要移动角色,请乘以移动方向*速度* Time.DeltaTime(以考虑不同的帧速率)。