2017-02-15 74 views
0

我不知道爲什麼Insantiation不起作用。我試圖用空格鍵來做。或者它可能是關於軸的東西?爲什麼我的遊戲不會實例化?

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

你檢查J即可1.完全相等。然而,getAxis返回浮動,這將是接近,但不完全等於1,而是檢查當j足夠接近1

例如(僞):

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

此外,您應該確保value其實等於0(你可能有一些其他的代碼修改它超越什麼所示)

2

比較浮動絕不是一個好主意。

j變量必須等於1value變量在此之前必須是0如果語句變爲true。 Input.GetAxis返回01之間的值。

如果你想要做的是,當按下空格鍵,他們只需使用的Input.GetKeyDown代替Input.GetAxis

if (Input.GetKeyDown(KeyCode.Space)) 
{ 
    Instantiate(projectile, hijo.position, hijo.transform.rotation); 
} 
相關問題