LookAtMousePosition, мешающее базовому (вертикальному, горизонтальному) движению Vector3 - PullRequest
0 голосов
/ 22 сентября 2018

не хочу занимать много вашего времени, поэтому я буду держать это коротко и сладко.

У меня есть 2 пустоты) (функции), которые делают игровую механику движения.Первая - это механика поворота LookAtMousePosition, а вторая - просто базовый Vector3 - получает горизонтальное и вертикальное движение.Без функции LookAtMousePosition я могу двигаться отлично и отлично.Однако, когда я добавляю LookAtMousePosition, я могу только прыгать и едва двигаться.

Вот мой полный код для моего движения. Сценарий:

[RequireComponent(typeof(PlayerMotor))]
public class janitor : MonoBehaviour {
private Camera mainCamera;

[SerializeField]
private float speed = 5f;

private PlayerMotor motor;
// Use this for initialization
void Start () 
{
    motor = GetComponent<PlayerMotor>();
    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 () 
{
    float xMov = Input.GetAxisRaw("Horizontal");
    float zMov = Input.GetAxisRaw("Vertical");

    Vector3 moveHorizontal = transform.right * xMov; //basic vector3 controls //(1,0,0)
    Vector3 moveVertical = transform.forward * zMov;// (0,0,1)

    //final movement vector. Normalised.
    Vector3 velocity = (moveHorizontal + moveVertical).normalized * speed; //normalises the length and speed of both vector3 variables above

    //Apply Movement
    motor.Move(velocity);

}

void FixedUpdate()
{
    //LookAtPositionOfMouse();
}
void LateUpdate()
{

}
}

А вот код, который инициирует движение(не вращение) в другом скрипте:

 private Vector3 _velocity = Vector3.zero;
 public void Move(Vector3 velocity)
{
    //gets movement vector
    _velocity = velocity;
}
 void PerformMovement()
{
    if (_velocity != Vector3.zero)
    {
        rb.MovePosition(rb.position + _velocity * Time.deltaTime);
    }
}

Я так растерялся, как это исправить.Что я должен делать?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...