Заставить игрока двигаться за курсором мыши (без щелчка / перетаскивания) - PullRequest
0 голосов
/ 25 апреля 2020

я пытаюсь заставить игрока двигаться к моей позиции курсора мыши. Я пытаюсь выяснить радиопередачу, и мне удалось отладить глобальные координаты положения моей мыши. Однако я изо всех сил пытаюсь выяснить, почему мой игрок стреляет в направлении у ... Сначала я подумал, что это было до моего положение камеры, как и когда я пытался это сделать раньше, координаты были stati c. Поэтому я специально установил ссылку на позицию своих игроков, чтобы увидеть, была ли это проблема, но которая все еще взлетает в небо. Я пробовал addForce с жестким телом, которое вроде работало, но работало только с вращением у , для любой причины. Я пробовал transform.position для тестирования кода, который работал, но все еще были проблемы с стрельбой в направлении Y, и я использовал Vector3.MoveTowards и Vector3.Lerp в transform.translate ... все с той же проблемой, я нажмите play, как только мой raycast попадет, игровой объект выстрелит в воздух, пока я не получу ошибку консоли, сказав слишком далеко.

public class MousePlayerController : MonoBehaviour
{

    public float speed = 10f; 
    private Camera cam;
    private Rigidbody playerRb;
    private Vector3 playerPos;
    private float heightLimit = 0.5f;
    // Start is called before the first frame update
    void Start()
    {
        cam = Camera.main;
        playerRb = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        playerPos = GameObject.Find("Player").transform.position;
        Ray mousePos = cam.ScreenPointToRay(Input.mousePosition);
        RaycastHit rayLength;

        if(Physics.Raycast(mousePos, out rayLength, Mathf.Infinity)) {
            Debug.Log(rayLength.point);
            Debug.DrawLine(mousePos.origin, rayLength.point, Color.blue);
            transform.Translate(Vector3.Lerp(playerPos, rayLength.point, speed * Time.deltaTime));
            //transform.position = Vector3.Lerp(playerPos, rayLength.point, speed * Time.deltaTime);
            //playerRb.AddForce(rayLength.point * speed * Time.deltaTime);
            if (transform.position.y > 1f) {
                //playerPos = new Vector3(transform.position.x, heightLimit, transform.position.z);
            }
        }
    }
}

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

1 Ответ

1 голос
/ 26 апреля 2020

Итак, cam.ScreenPointToRay(Input.mousePosition) дает точку в трехмерном пространстве, однако нас интересует только 2-й кординат, поэтому мы можем просто отбросить компонент Y

// get mouse position
Vector3 mousePos = Camera.ScreenToWorldPoint(Input.mousePosition);

// discard y
mousePos = new Vector3(mousePos.x, 0, mousePos.z);

// we can then use this
transform.Translate(Vector3.Lerp(playerPos, mousePos, speed * Time.deltaTime));

Надеюсь, это решит вашу проблему

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