unity3d
入力システム
サーチ…
GetKeyとGetKeyDownとGetKeyUpの違い
入力は、更新機能から読み取る必要があります。
利用可能なすべてのKeycode enumの参照。
1. Input.GetKey
キープレスを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でキーを押して.Reading Input.GetKeyDown
:
Input.GetKeyDown
は、指定されたキーが押されたときに1回だけtrueになります。これは、 Input.GetKey
とInput.GetKeyDown
主な違いInput.GetKeyDown
。その使用の1つの使用例は、UIまたは懐中電灯またはアイテムのオン/オフを切り替えることである。
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でキーを押して.Reading Input.GetKeyUp
:
これはInput.GetKeyDown
とInput.GetKeyDown
です。キー押下が解除/解除されたときを検出するために使用されます。 Input.GetKeyDown
と同様に、 true
1 回だけ返しtrue
。たとえば、 Input.GetKeyDown
キーがInput.GetKeyDown
れているときenable
ライトをenable
し、 Input.GetKeyDown
キーをInput.GetKeyUp
ときにライトを無効にすることがenable
ます。
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
は、加速度センサーを読み取るために使用されます。これは、3D空間にx
、 y
、 z
軸値を含む結果としてVector3
を返します。
void Update()
{
Vector3 acclerometerValue = rawAccelValue();
Debug.Log("X: " + acclerometerValue.x + " Y: " + acclerometerValue.y + " Z: " + acclerometerValue.z);
}
Vector3 rawAccelValue()
{
return Input.acceleration;
}
加速度センサの読み取り(Advance)
加速度センサから生の値を直接使用して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
を返し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
。マウスボタンが離されて再び押されるまで、再び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
は、指定されたマウスボタンがいつ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");
}
}