2015-12-04 25 views
0

我有一个弹丸,当我按下空间时,我想加载并点燃。这是我为它的代码,以我的性格脚本的其余部分一起:实例化创建4个弹丸而不是1个

public float moveSpeed = .2f; 
public float shotspeed = 1f; 
int selectedCharacter = 1; 
int selectedProjectile = 1; 
string characterName; 
// Update is called once per frame 
void Update() { 


    if (Input.GetKey (KeyCode.LeftArrow)) { 
     transform.position = transform.position + new Vector3(-moveSpeed, 0f, 0f); 
    } 
    if (Input.GetKey (KeyCode.RightArrow)) { 
     transform.position = transform.position + new Vector3(moveSpeed, 0f, 0f); 
    } 

    if (Input.GetKeyDown (KeyCode.Space)) { 
     GameObject bullet = (GameObject)Resources.Load("Projectile" + selectedProjectile, typeof(GameObject)); 
     Instantiate (bullet, transform.position, Quaternion.identity); 
    } 

    if (Input.GetKeyDown (KeyCode.Tab)) { 

     if (selectedCharacter < 4) { 
      selectedCharacter++; 
      selectedProjectile++; 
     } 
     else { 
      selectedCharacter = 1; 
      selectedProjectile = 1; 
     } 

     for (int i = 1; i < 5; i++) { 
      if (i != selectedCharacter){ 
       characterName = "C" + i; 
       GameObject.Find (characterName).GetComponent<Renderer>().enabled = false; 
      } 
      else { 
       characterName = "C" + selectedCharacter; 
       GameObject.Find(characterName).GetComponent<Renderer>().enabled=true; 

      } 
     } 
    } 


} 

是这样的,因为我有四个不同的炮弹和selectedProjectile得到改变我每次按标签时间。

附着在弹丸上的是弹丸运动脚本。

但是,当我按空间时,4个子弹被实例化而不是一个。

我在做什么错?

+2

不认为你已经向我们展示了足够的代码。另外,每次有人按下按钮时是否应该加载资源?预载所有的射弹不是更好吗? – mpen

+0

我看到的代码只实例化了一个项目符号。你没有附上那个脚本四次的东西,是吗?你应该在每次实例化一个项目符号后添加一个小的'Debug.Log()',看看你会得到多少个日志。如果日志中只有1个,子弹来自其他地方。 'Input.GetKeyDown()'也应该是正确的,只在该关键帧关闭的一帧中返回'true'。你的硬件没问题,空格键上没有松动的接触,导致'GetKeyDown()'触发四次? –

+0

@mpen我添加了我角色脚本的其余部分。 – quibblify

回答

0

我将评论移至答案。

如果硬件不是问题,那么我怀疑该脚本是附加到多个对象。

你还有其他角色吗?你是否在代码中附加脚本?在检查员?

修复可能是添加一个shotDelay。但那只是一个解决方法。

我建议你仔细检查一下,你没有附加到多个对象的脚本。

相关问题