Input.GetkeyDown возвращает true без нажатия кнопки - PullRequest
1 голос
/ 14 марта 2019

Я создаю систему, в которой вы можете нажать определенную клавишу, и она поместит объект на вашем месте мыши.Каждый раз, когда вы нажимаете клавишу «1», она должна располагаться внизу в месте расположения мыши, но по какой-то причине каждый кадр Input.GetKeyDown("Alpha1"); регистрируется как истинный, поэтому, куда бы я ни двигал мышь, он помещает блок вниз, независимо от того, что я нажимаю.Это часто случалось со мной в последнее время, и я не могу найти никаких ответов.

using UnityEngine;

public class CubePlacer : MonoBehaviour
{
    private Grid grid;
    public KeyCode place;

    private void Awake()
    {
        grid = FindObjectOfType<Grid>();
    }

    private void Update()
    {
        if (Input.GetKeyDown(place)) ;
        {
            RaycastHit hitInfo;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out hitInfo))
            {
                PlaceCubeNear(hitInfo.point);
            }
        }
    }

    private void PlaceCubeNear(Vector3 clickPoint)
    {
        var finalPosition = grid.GetNearestPointOnGrid(clickPoint);
        GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = finalPosition;

        //GameObject.CreatePrimitive(PrimitiveType.Sphere).transform.position = nearPoint;
    }
}

1 Ответ

6 голосов
/ 14 марта 2019
if (Input.GetKeyDown(place)) ; // <--- remove this semi colon
        {
            RaycastHit hitInfo;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out hitInfo))
            {
                PlaceCubeNear(hitInfo.point);
            }
        }

Вам необходимо удалить точку с запятой после оператора If.Он завершает строку и после этого вызывает выполнение блока каждый раз, когда вызывается метод Update().

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