2017-02-15 3 views
0

私はなぜ刺戟が機能しないのか分かりません。私はスペースバーでやろうとしている。それとも軸について何かできるのでしょうか?なぜ私のゲームはインスタンス化されませんか?

public GameObject projectile; 
public Transform padre, hijo; 
public Rigidbody r; 
private float value; 

void Start() { 
    padre = transform.parent; 
    hijo = transform.GetChild (0); 
    value = 0; 
} 

void Update() { 

    float j = Input.GetAxis ("Jump"); 
    if (j == 1 && value == 0) { 
     Instantiate (projectile, hijo.position, hijo.transform.rotation); 
    } 

    float h = Input.GetAxis ("Horizontal2"); 
    r.transform.Translate (h * Time.deltaTime, 0, 0); 

    float v = Input.GetAxis ("Vertical2"); 
    padre.Rotate (0, 0, -v * Time.deltaTime * 20); 

    value = j; 
} 
+1

の使用押されたときにゲームオブジェクトをインスタンス化している場合。 'GetAxis'はデフォルトで押されたときに1を即座に返さず、値を平滑化します。 –

+0

スペースでクリックされたかどうかを確認するには 'if(Input.GetKeyDown(KeyCode.Space)){j = 1}'を試してください。平滑化したくない場合は、GetAxisRawを使用してください。 – Maakep

答えて

0

あなたはしかし、getAxisが近くなります浮動小数点数を返しますが、1と正確に一致しませjは1

に十分に近いときに代わりにチェック1.正確に等しいJをチェックしています例えば(擬似コード):

float j = Input.GetAxis ("Jump"); 
float ep=.1f; 
if (Math.abs(j-1)<ep && value == 0) { 
    //Instantiate 

また、あなたはvalueが実際に0に等しいことを確認する必要があります(あなたが示すいただきまし超えて、それを修正するいくつかの他のコードを持っているかもしれません)

2

フロートを比較することは決して良い考えではありません。

変数が1と等しい必要があり、value変数が0である必要があります。その前にif文がtrueになります。 Input.GetAxisは、01の間の値を返します。

あなたがしたいすべてがスペースキーが、彼らは単にあなたが十分な長さのスペースを保持していることを確認してくださいInput.GetKeyDown代わりInput.GetAxis

if (Input.GetKeyDown(KeyCode.Space)) 
{ 
    Instantiate(projectile, hijo.position, hijo.transform.rotation); 
} 
関連する問題