unity3d
입력 시스템
수색…
키 누르기 및 GetKey, GetKeyDown 및 GetKeyUp 간의 차이점 읽기
입력은 반드시 Update 함수에서 읽어야합니다.
사용 가능한 모든 키 코드 enum에 대한 참조.
1. Input.GetKey
키 누르기 읽기 :
Input.GetKey
는 사용자가 지정된 키를 누른 상태에서 반복적 으로 true
를 반환 true
. 이것은 지정된 키를 누른 상태에서 반복적 으로 무기를 발사하는 데 사용할 수 있습니다. 다음은 스페이스 키를 누르고있는 경우의 총알 자동 발사의 예입니다. 플레이어는 키를 반복해서 눌렀다가 놓을 필요가 없습니다.
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. Input.GetKeyDown으로 키 누르기를 Input.GetKeyDown
.
Input.GetKeyDown
은 지정된 키를 누를 때 한 번만 true가됩니다. 이것이 Input.GetKey
와 Input.GetKeyDown
의 주요 차이점입니다. 한 가지 사용 예는 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
과 마찬가지로 true
한 번만 반환 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
은 가속도계 센서를 읽는 데 사용됩니다. 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;
}
가속도계 센서 읽기 (고급)
가속도계 센서에서 직접 원시 값을 사용하여 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
은 지정된 마우스 단추가 해제 된시기를 감지하는 데 사용됩니다. 지정된 마우스 버튼을 놓으면 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");
}
}