unity3d
Inmatningssystem
Sök…
Läsknapp Tryck och skillnaden mellan GetKey, GetKeyDown och GetKeyUp
Ingången måste läsa från uppdateringsfunktionen.
Referens för alla tillgängliga Keycode enum.
1. Input.GetKey
läsningsknappen med Input.GetKey
:
Input.GetKey
kommer upprepade gånger att returnera true
medan användaren håller ner den angivna nyckeln. Detta kan användas för att upprepade gånger avfyra ett vapen medan du håller ner den angivna nyckeln. Nedan visas ett exempel på automatisk eldspruta när mellanslagstangenten hålls nere. Spelaren behöver inte trycka och släppa tangenten om och om igen.
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. Läs-knapptryckning med Input.GetKeyDown
:
Input.GetKeyDown
kommer bara att gälla en gång när den angivna tangenten trycks ned. Detta är nyckelskillnaden mellan Input.GetKey
och Input.GetKeyDown
. Ett exempel på dess användning är att växla ett gränssnitt eller ficklampa eller ett objekt på / av.
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 knapptryckning med Input.GetKeyUp
:
Det här är Input.GetKeyDown
motsatsen till Input.GetKeyDown
. Det används för att upptäcka när knapptryckning släpps / lyfts. Precis som Input.GetKeyDown
returneras true
endast en gång. Du kan till exempel enable
ljus när tangenten hålls nere med Input.GetKeyDown
sedan inaktivera ljuset när tangenten släpps med 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!");
}
}
Läs Accelerometer Sensor (Basic)
Input.acceleration
används för att läsa accelerationsmätarsensorn. Det returnerar Vector3
som ett resultat som innehåller x
, y
och z
axelvärden i 3D-rymden.
void Update()
{
Vector3 acclerometerValue = rawAccelValue();
Debug.Log("X: " + acclerometerValue.x + " Y: " + acclerometerValue.y + " Z: " + acclerometerValue.z);
}
Vector3 rawAccelValue()
{
return Input.acceleration;
}
Läs Accelerometer Sensor (Advance)
Om du använder råvärden direkt från accelerometersensorn för att flytta eller rotera ett GameObject kan det orsaka problem som ryckiga rörelser eller vibrationer. Det rekommenderas att jämna ut värdena innan du använder dem. I själva verket bör värden från accelerometer-sensorn alltid slätas ut före användning. Detta kan åstadkommas med ett lågpassfilter och det är här Vector3.Lerp
kommer på plats.
//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;
}
Läs Accelerometer Sensor (Precision)
Läs accelerometersensorn med precision.
Detta exempel tilldelar minne:
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;
}
Detta exempel inte allokerar minne:
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;
}
Observera att detta inte filtreras. Titta här för att jämna ut accelerometervärden för att ta bort brus.
Läs musknapp (vänster, mitten, höger) klick
Dessa funktioner används för att kontrollera musknappklick.
-
Input.GetMouseButton(int button);
-
Input.GetMouseButtonDown(int button);
-
Input.GetMouseButtonUp(int button);
De tar alla samma parameter.
- 0 = Vänster musklick.
- 1 = Höger musklick.
- 2 = Mellan musklick.
GetMouseButton
används för att upptäcka när musknappen kontinuerligt hålls nere. Det återgår true
medan den angivna musknappen hålls intryckt.
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
används för att upptäcka när det finns musklick. Det återgår true
om det trycks en gång . Det kommer inte att true
igen förrän musknappen släpps och trycks ned igen.
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
används för att upptäcka när den specificerade musknappen släpps. Detta kommer bara att true
när den angivna musknappen släpps. För att återge sanningen måste den tryckas på och släppas igen.
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");
}
}