如果玩家将鼠标放在C#位置,基本Vector3的运动就会中断

时间:2018-09-25 23:37:21

标签: c# unity3d

我正在尝试重写一个月前开发的旧游戏,但是在实现运动脚本方面遇到困难。

到目前为止,我有一个基本的运动系统,我只需在其中添加与L,R,U,D箭头键有关的速度和力即可。我这样做不是为了获得基本的水平和垂直轴,因为它们在我的下一部分代码中遇到了问题。

一切正常,直到我在脚本中添加播放器注视mousePosition的脚本为止。我想我的播放器向着鼠标位置旋转时,其关于哪个位置向左和哪个位置向右的想法变得混乱了。

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class movement : MonoBehaviour {
    private Camera mainCamera;
    public float speed = 5f;

    // Use this for initialization
    void Start () 
    {
        mainCamera = FindObjectOfType<Camera>();
    }

    void LookAtPositionOfMouse()
    {
        Ray cameraRay = mainCamera.ScreenPointToRay(Input.mousePosition);
        Plane groundPlane = new Plane(Vector3.up, Vector3.zero);
        float raylength;

        if (groundPlane.Raycast(cameraRay, out raylength))
        {
            Vector3 pointToLook = cameraRay.GetPoint(raylength);
            Debug.DrawLine(cameraRay.origin, pointToLook, Color.blue);
            transform.LookAt(new Vector3(pointToLook.x, transform.position.y, pointToLook.z));
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += Vector3.right * speed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position += Vector3.left * speed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.position += Vector3.forward * speed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.position += Vector3.back * speed * Time.deltaTime;
        }

        LookAtPositionOfMouse();
    }
}

我知道这是一种非常原始的方式,但是在尝试解决这个问题时,我现在想使一切保持简单。

谢谢。

1 个答案:

答案 0 :(得分:2)

问题是,当您更改变换的位置时,您并没有考虑到旋转。

您可以乘以当前的transform.rotation

transform.position += transform.rotation * Vector3.forward * speed * Time.deltaTime;