2012-07-06 8 views
8

私はC#を初めて使っています。私はUnityで何かを作って、C#とUnityをもっとよく学ぶのを助けています。キーが押されている間のC#とUnity3D

私は理由を知りたい:

void Update() 

私は(にキーを押している間、それが発射されていない理由更新は、ループであるので:内に置かれたとき

Input.GetKeyDown(KeyCode.UpArrow)) 

は一度だけ発生させます私の場合は球を動かす)?

私は、キーを押して離したときに変更される2つのboolを使用して動作させることができました。

documentation
using UnityEngine; 
using System.Collections; 

public class sphereDriver : MonoBehaviour { 
int x ; 
bool upPressed = false ; 
bool downPressed = false ; 
void Start() 
{ 
    x = 0 ; 
} 

void Update() 
{ 
    if(x > 0) { 
     x -= 1 ; 
    } 
    if(x < 0) { 
     x += 1 ; 
    } 
    if(Input.GetKeyDown(KeyCode.UpArrow)) 
    { 
     upPressed = true ; 
    } 
    else if(Input.GetKeyUp(KeyCode.UpArrow)) 
    { 
     upPressed = false ; 
    } 

    if(upPressed == true) 
    { 
     x += 5 ; 
    } 

    if(Input.GetKeyDown(KeyCode.DownArrow)) 
    { 
     downPressed = true ; 
    } 
    else if(Input.GetKeyUp(KeyCode.DownArrow)) 
    { 
     downPressed = false ; 
    } 

    if(downPressed == true) 
    { 
     x -= 5 ; 
    } 

    transform.Translate(x * Time.deltaTime/10, 0, 0) ; 
} 

} 

答えて

6

が、これは通常、予期される動作であることを言う:

は、ここで私は球を移動し、加速/減速をシミュレートすることで遊んでいます私の完全なスクリプトです。

おそらくそれらは(GetButtonがGetAxisは1を返し、trueを返す)限り、キーが押されているように、「押す」を示していることから、代わりにGetButtonまたはGetAxisを使用したいです。

+0

ありがとうございました!これらの2つの関数はUnity固有のものなので、元々やったやり方は、もともとC#で欲しいものを達成するためにほとんど何をするのでしょうか? – imperium2335

+0

はい、これは一般的な方法です。 – redtuna

5

Input.GetKeyDownのドキュメントから。

状態が各フレームをリセットするため、この関数をUpdate関数から呼び出す必要があります。ユーザー がキーを離してもう一度押すまでtrueに戻りません。

この方法は、メニューやその他のワンタイムイベントを開くときに最も便利です。継続的なダイアログなど。

上記の方法を使用できますが、Input.GetKeyを使用すると目標を達成できます。

ユーザーがnameで指定されたキーを押している間はtrueを返します。