首页 > 解决方案 > Unity 3d我的角色没有旋转到我画的raycasthit点

问题描述

我用相机正面的方向在我的中心人物上画了一条轨道。我曾经Rigidbody.LookRotation让角色回到那个点,但事实并非如此。

private void Update()
{
    Physics.Raycast(transform.position + new Vector3(0, 3, 0), mainCam.transform.forward, out hit);
    Quaternion lookrotation = Quaternion.LookRotation(new Vector3(hit.point.x,0,hit.point.z));
    transform.rotation = Quaternion.Slerp(transform.rotation, lookrotation, Time.deltaTime * 2);
    Debug.DrawLine(transform.position + new Vector3(0, 3, 0),hit.point);
    Debug.Log(hit.collider.gameObject.name);
}

我的场景

标签: c#unity3d

解决方案


乍一看有两点:

  1. LookRotation期待一个前进的方向..目前你只给它一个位置

    您宁愿使用例如

    if(Physics.Raycast(transform.position + new Vector3(0, 3, 0), mainCam.transform.forward, out var hit))
    {
        var direction = hit.point - transform.position;
        direction.y = 0;
        var lookrotation = Quaternion.LookRotation(direction);
        ...
    }
    
  2. 目前你的旋转速度也很慢。假设 60 Fps从当前到目标旋转,您使用1/60 * 2大约 10倍的因子进行插值的每一帧。0.033..因此,您越接近目标旋转,速度就越慢。

    您宁愿不乘以Time.deltaTime而是使用常数因子,例如0.5f

    或使用RotateTowards并提供一个连续的anglePerSecond * Time.deltaTime.


推荐阅读