Базовое движение Vector3 нарушается, если игрок смотрит на положение мыши C # - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь переписать старую игру, над которой я работал месяц назад, но у меня возникают проблемы с реализацией сценариев движения.

На данный момент у меня есть базовая система движений, в которой я просто добавляю скорость и силу.относящиеся к клавишам со стрелками 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 голосов
/ 26 сентября 2018

Дело в том, что когда вы изменяете положение вашего преобразования, вы не учитываете его вращение.

Вероятно, у вас все будет хорошо, просто умножив текущее значение transform.rotation.

transform.position += transform.rotation * Vector3.forward * speed * Time.deltaTime;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...