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

时间:2016-10-23 01:38:57

标签: c# unity3d

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

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

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

0 个答案:

没有答案