私は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) ;
}
}
documentation は、これが通常の予想される動作であることを示しています。
キーが押されている限り「押された」ことを示すため、代わりに GetButton または GetAxis を使用することをお勧めします(GetButtonはtrueを返し、GetAxisは1を返します)。
Input.GetKeyDown のドキュメントから。
状態はフレームごとにリセットされるため、Update関数からこの関数を呼び出す必要があります。ユーザーがキーを離してもう一度押すまで、trueは返されません。
この方法は、メニューやその他の1回限りのイベントを開く場合に最も役立ちます。ダイアログの継続など。
上記のメソッドを使用できますが、 Input.GetKey を使用して目標を達成できます。
ユーザーが名前で識別されるキーを押している間、trueを返します。