unity3d
Входная система
Поиск…
Чтение ключа Пресса и различие между 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");
}
}