13

私はC#を初めて使用します。私はUnityで何かを作成して、C#とUnityをよりよく学ぶのに役立てています。

理由を知りたい:

Input.GetKeyDown(KeyCode.UpArrow))

次の場所に配置された場合に1回だけ発砲します。

void Update()

更新はループであるため、キーを押している間(私の場合は球を移動させる)に更新が実行されないのはなぜですか?

キーを押したり離したりすると変化する2つのブールを使用して、なんとか機能させることができました。

これが、球を動かして加速/減速をシミュレートするために遊んでいる私の完全なスクリプトです。

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) ;
}

}
4

2 に答える 2

7

ドキュメントには、これは通常の予想される動作であると記載されています。

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

于 2012-07-06T19:54:01.630 に答える
6

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

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

この方法は、メニューやその他の1回限りのイベントを開く場合に最も役立ちます。ダイアログの継続など。

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

ユーザーが名前で識別されるキーを押している間、trueを返します。

于 2013-06-14T22:20:27.347 に答える