Input.GetkeyDown返回true,无需按下按钮

时间:2019-03-14 14:08:33

标签: c# unity3d input

我正在制作一个系统,您可以按某个键,它将在您的鼠标位置放置一个对象。每次您按下键“ 1”时,都应将其放置在鼠标位置,但是由于某种原因Input.GetKeyDown("Alpha1");每帧都被注册为true,因此无论我将鼠标移到何处,无论我按什么键,都将其向下放置。这是最近发生在我身上的很多事情,我似乎找不到任何答案。

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 个答案:

答案 0 :(得分:6)

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()方法时使该块随后执行。