void Update()
{
  MovePlayer();
}

然后第一个原始的MovePlayer我旋转了播放器,但在特定的角度我设置了例如:

private void MovePlayer()
    {
        if (Input.GetMouseButtonDown(0))
        {
            targetAngles = transform.eulerAngles + 85.0f * Vector3.up;
            StartCoroutine(TurnObject(transform, transform.eulerAngles, targetAngles, smooth));
        }
    }

但我希望它旋转到鼠标光标位置的角度点击不要走在那里或移动到那里只旋转和面对鼠标光标位置点击 . 所以我试图将MovePlayer方法更改为此,但这是错误的它什么都不做:

private void MovePlayer()
    {
        if (Input.GetMouseButtonDown(0))
        {

            RaycastHit hit;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                startPositon = hit.point;

                targetAngles = transform.eulerAngles + 0 * Vector3.up;
                StartCoroutine(TurnObject(transform, transform.eulerAngles, targetAngles, smooth));
            }
        }
    }

IEnumerator TurnObject(Transform ship, Vector3 startAngle, Vector3 endAngle, float smooth)
    {
        float lerpSpeed = 0;
        isSpinning = true;

        while (lerpSpeed < 1)
        {
            ship.eulerAngles = Vector3.Lerp(startAngle, endAngle, lerpSpeed);
            lerpSpeed += Time.deltaTime * smooth;
            yield return null;
        }
        startPositon = ship.position;
        isSpinning = false;
    }

这是有效但有一些问题:

void Update()
    {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hit, 100000))
        {
            transform.LookAt(hit.point);
        }
    }

第一个问题是当我将鼠标光标指向天空时,因为它太远而且玩家没有旋转,然后当我指向距离范围内的东西时,玩家会跳到该位置 . 不知道如何解决它 . 也许计算天空(在我的情况下是天空盒子)距离所以当指向天空时它也会旋转?

第二个问题是,当我将鼠标光标指向我自己的玩家身体时,它正在进行一些快速旋转 . 我怎么能避免呢?还是解决它?

我试图改变这条线:

if (Physics.Raycast(ray, out hit, 100000))

if (Physics.Raycast(ray, out hit))

但它没有解决它 . 也许问题是我的天空是一个天空盒,我拖到了场景窗口,所以它不是一个对象 .

我的天空盒是我拖到场景窗口的材料,所以这可能是当鼠标光标指向天空时我无法旋转播放器的问题 . 有解决方案吗