Поиск…


Чтение ключа Пресса и различие между GetKey, GetKeyDown и GetKeyUp

Вход должен быть прочитан из функции «Обновить».

Ссылка для всех доступных перечислений Keycode .

1. Чтение нажатия клавиши с Input.GetKey :

Input.GetKey будет повторно возвращать true пока пользователь удерживает указанный ключ. Это можно использовать для многократного запуска оружия, удерживая указанный ключ нажатым. Ниже приведен пример автоматического огня пули, когда удерживается клавиша Space. Игрок не должен нажимать и отпускать клавишу снова и снова.

public GameObject bulletPrefab;
public float shootForce = 50f;

void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        Debug.Log("Shooting a bullet while SpaceBar is held down");

        //Instantiate bullet
        GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation) as GameObject;

        //Get the Rigidbody from the bullet then add a force to the bullet
        bullet.GetComponent<Rigidbody>().AddForce(bullet.transform.forward * shootForce);
    }
}

2. Нажмите клавишу Enter с Input.GetKeyDown :

Input.GetKeyDown будет Input.GetKeyDown только один раз при нажатии указанной клавиши. Это ключевое различие между Input.GetKey и Input.GetKeyDown . Одним из примеров использования его использования является включение пользовательского интерфейса или фонарика или элемента вкл. / Выкл.

public Light flashLight;
bool enableFlashLight = false;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        //Toggle Light 
        enableFlashLight = !enableFlashLight;
        if (enableFlashLight)
        {
            flashLight.enabled = true;
            Debug.Log("Light Enabled!");
        }
        else
        {
            flashLight.enabled = false;
            Debug.Log("Light Disabled!");
        }
    }
}

3. Нажмите клавишу Enter с Input.GetKeyUp :

Это полная противоположность Input.GetKeyDown . Он используется для обнаружения при отпускании / снятии нажатия клавиши. Как и Input.GetKeyDown , он возвращает true только один раз . Например, вы можете enable свет при удерживании клавиши с помощью Input.GetKeyDown затем отключите свет, когда клавиша будет выпущена с помощью Input.GetKeyUp .

public Light flashLight;
void Update()
{
    //Disable Light when Space Key is pressed
    if (Input.GetKeyDown(KeyCode.Space))
    {
        flashLight.enabled = true;
        Debug.Log("Light Enabled!");
    }

    //Disable Light when Space Key is released
    if (Input.GetKeyUp(KeyCode.Space))
    {
        flashLight.enabled = false;
        Debug.Log("Light Disabled!");
    }
}

Прочитать датчик акселерометра (базовый)

Input.acceleration используется для считывания датчика акселерометра. Он возвращает Vector3 в результате, который содержит значения оси x , y и z в трехмерном пространстве.

void Update()
{
    Vector3 acclerometerValue = rawAccelValue();
    Debug.Log("X: " + acclerometerValue.x + "  Y: " + acclerometerValue.y + "  Z: " + acclerometerValue.z);
}

Vector3 rawAccelValue()
{
    return Input.acceleration;
}

Прочитать датчик акселерометра (предварительный)

Использование исходных значений непосредственно с датчика акселерометра для перемещения или поворота GameObject может вызвать такие проблемы, как отрывистые движения или вибрации. Перед использованием рекомендуется сгладить значения. Фактически, значения от датчика акселерометра всегда должны быть сглажены перед использованием. Это может быть выполнено с помощью фильтра нижних частот, и именно здесь Vector3.Lerp встает на свои места.

//The lower this value, the less smooth the value is and faster Accel is updated. 30 seems fine for this
const float updateSpeed = 30.0f;

float AccelerometerUpdateInterval = 1.0f / updateSpeed;
float LowPassKernelWidthInSeconds = 1.0f;
float LowPassFilterFactor = 0;
Vector3 lowPassValue = Vector3.zero;

void Start()
{
    //Filter Accelerometer
    LowPassFilterFactor = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds;
    lowPassValue = Input.acceleration;
}

void Update()
{

    //Get Raw Accelerometer values (pass in false to get raw Accelerometer values)
    Vector3 rawAccelValue = filterAccelValue(false);
    Debug.Log("RAW X: " + rawAccelValue.x + "  Y: " + rawAccelValue.y + "  Z: " + rawAccelValue.z);

    //Get smoothed Accelerometer values (pass in true to get Filtered Accelerometer values)
    Vector3 filteredAccelValue = filterAccelValue(true);
    Debug.Log("FILTERED X: " + filteredAccelValue.x + "  Y: " + filteredAccelValue.y + "  Z: " + filteredAccelValue.z);
}

//Filter Accelerometer
Vector3 filterAccelValue(bool smooth)
{
    if (smooth)
        lowPassValue = Vector3.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);
    else
        lowPassValue = Input.acceleration;

    return lowPassValue;
}

Прочитать датчик акселерометра (точность)

Считывайте датчик акселерометра с точностью.

В этом примере выделяется память:

void Update()
{
    //Get Precise Accelerometer values 
    Vector3 accelValue = preciseAccelValue();
    Debug.Log("PRECISE X: " + accelValue.x + "  Y: " + accelValue.y + "  Z: " + accelValue.z);

}

Vector3 preciseAccelValue()
{
    Vector3 accelResult = Vector3.zero;
    foreach (AccelerationEvent tempAccelEvent in Input.accelerationEvents)
    {
        accelResult = accelResult + (tempAccelEvent.acceleration * tempAccelEvent.deltaTime);
    }
    return accelResult;
}

В этом примере не выделяется память:

void Update()
{
    //Get Precise Accelerometer values 
    Vector3 accelValue = preciseAccelValue();
    Debug.Log("PRECISE X: " + accelValue.x + "  Y: " + accelValue.y + "  Z: " + accelValue.z);

}

Vector3 preciseAccelValue()
{
    Vector3 accelResult = Vector3.zero;
    for (int i = 0; i < Input.accelerationEventCount; ++i)
    {
        AccelerationEvent tempAccelEvent = Input.GetAccelerationEvent(i);
        accelResult = accelResult + (tempAccelEvent.acceleration * tempAccelEvent.deltaTime);
    }
    return accelResult;
}

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

Прочитать кнопку мыши (левый, средний, правый)

Эти функции используются для проверки щелчков мыши.

  • Input.GetMouseButton(int button);
  • Input.GetMouseButtonDown(int button);
  • Input.GetMouseButtonUp(int button);

Все они принимают один и тот же параметр.

  • 0 = щелчок левой кнопкой мыши.
  • 1 = Щелкните правой кнопкой мыши.
  • 2 = Средний щелчок мыши.

GetMouseButton используется для обнаружения, когда кнопка мыши постоянно удерживается . Он возвращает true когда указанная кнопка мыши удерживается нажатой.

void Update()
{
    if (Input.GetMouseButton(0))
    {
        Debug.Log("Left Mouse Button Down");
    }

    if (Input.GetMouseButton(1))
    {
        Debug.Log("Right Mouse Button Down");
    }

    if (Input.GetMouseButton(2))
    {
        Debug.Log("Middle Mouse Button Down");
    }
}

GetMouseButtonDown используется для обнаружения при щелчке мышью. Он возвращает true если он нажат один раз . Он не вернется true , пока кнопка мыши не будет отпущена и нажата снова.

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Debug.Log("Left Mouse Button Clicked");
    }

    if (Input.GetMouseButtonDown(1))
    {
        Debug.Log("Right Mouse Button Clicked");
    }

    if (Input.GetMouseButtonDown(2))
    {
        Debug.Log("Middle Mouse Button Clicked");
    }
}

GetMouseButtonUp используется для обнаружения, когда выделенная кнопка мыши отпущена. Это будет возвращать только true , как только указанная кнопка мыши отпущена. Чтобы снова вернуть true, его нужно снова нажать и отпустить.

void Update()
{
    if (Input.GetMouseButtonUp(0))
    {
        Debug.Log("Left Mouse Button Released");
    }

    if (Input.GetMouseButtonUp(1))
    {
        Debug.Log("Right Mouse Button Released");
    }

    if (Input.GetMouseButtonUp(2))
    {
        Debug.Log("Middle Mouse Button Released");
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow