C# 如何根据单击的鼠标光标位置旋转播放器?

C# 如何根据单击的鼠标光标位置旋转播放器?,c#,unity3d,C#,Unity3d,然后第一个原始移动播放器我确实旋转了播放器,但以我设置的特定角度旋转,例如: void Update() { MovePlayer(); } 但我希望它旋转到鼠标光标位置的角度,而不是走到那里,或者移动到那里只是旋转并面向鼠标光标位置。因此,我尝试将MovePlayer方法更改为此,但这是错误的,它没有任何作用: private void MovePlayer() { if (Input.GetMouseButtonDown(0)) {

然后第一个原始移动播放器我确实旋转了播放器,但以我设置的特定角度旋转,例如:

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));
        }
    }

第一个问题是,当我将鼠标光标指向天空时,因为它太远,玩家没有旋转,然后当我指向远处的某个位置时,玩家跳到该位置。不知道怎么解决。也许可以计算天空(在我的例子中是天空框)的距离,这样它在指向天空时也会旋转

第二个问题是,当我将鼠标光标指向我自己的身体时,它正在原地快速旋转。我怎样才能避免呢?还是解决它

我试图改变路线:

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

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

但这并没有解决问题。可能问题是我的天空是一个天空盒,我拖到了场景窗口,所以它不是一个对象


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

您使用的是第一人称摄像头、第三人称摄像头、鸟瞰摄像头还是…?@Abion47 ThirdPersonController是我的播放器,主摄像头就在播放器后面,但它不是播放器的孩子,而是在一般的层次结构中。我在播放器上移动鼠标时设法解决了这个问题。我刚刚在注视线之前添加了这条线:if(hit.collider.name!=“ThirdPersonController”)现在我必须解决天空的问题。你使用的是第一人称摄影机、第三人称摄影机、鸟眼摄影机、,或者…?@Abion47 ThirdPersonController是我的播放器,主摄像头就在播放器后面,但它不是播放器的孩子,而是在一般的层次结构中。当我在播放器上移动鼠标时,我设法解决了这个问题。我刚刚在LookAt行之前添加了这一行:if(hit.collider.name!=“ThirdPersonController”),现在我必须解决天空的问题。
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))