2017-07-28 78 views
-2

我无法让我的循环工作。我可以让它工作一次,或者没有限制。我试图让硬币实例化3次。我不认为for循环本身是错误的,但结构的某处是。循环处于Looted函数中。无法让我的循环工作

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class corpseKicked : MonoBehaviour { 

private Rigidbody2D rb; 
private Animator anim; 
public GameObject coinPrefab; 
public Transform coinSpawn; 
private bool kicked = false; 
public float timer = 2f; 
public GameObject deathFlamePrefab; 
private bool flamer; 
private bool pay = false; 
private bool broke = false; 

void Start() 
{ 
    anim = GetComponent<Animator>(); 
    rb = GetComponent<Rigidbody2D>(); 
} 

// Update is called once per frame 
void Update() 
{ 
    Looted(); 
} 

public void OnTriggerEnter2D(Collider2D other) 
{ 
    if (!kicked && other.gameObject.tag == "kickIndicator") { 
     kicked = true; 
     transform.Translate (0.0f, .05f, 0.0f); 
    } 
} 

public void Looted() 
{ 
    if (!pay && kicked) { 

     pay = true; 
     Instantiate (coinPrefab, coinSpawn.position, coinSpawn.rotation); 
     kicked = false; 
     pay = false; 
     for (int i = 1; i <= 3; i++) 

      Debug.Log ("$$$$$$$$$"); 
    } 
} 
+3

i = 3;'应该是'i <= 3;'。它是“继续,而这是真实的”,而不是“当这是真的时停止”。 – Blorgbeard

+0

哦对。我忘了把它放回去。我得到了一个点,我试图随机组合。谢谢 –

+0

请勿更改您的问题以显示更正的源代码。这使它毫无价值。 – abto

回答

0
public GameObject deathFlamePrefab; 
private bool flamer; 
private bool pay = false; 
private bool broke = false; 
private int kickedCount = 0; 

void Start() 
{ 
    anim = GetComponent<Animator>(); 
    rb = GetComponent<Rigidbody2D>(); 
} 

// Update is called once per frame 
void Update() 
{ 
    Looted(); 
} 

public void OnTriggerEnter2D(Collider2D other) 
{ 
    if (!kicked && other.gameObject.tag == "kickIndicator") { 
     kicked = true; 
     transform.Translate (0.0f, .05f, 0.0f); 
    } 
} 

public void Looted() 
{ 
    if (!pay && kicked) { 

     pay = true; 

     kicked = false; 

     if (kickedCount < 3) 
     { 
      Instantiate (coinPrefab, coinSpawn.position, coinSpawn.rotation); 
      kickedCount++; 
     } 
     pay = false; 
    } 
} 

上午不确定什么pay没有,但你可能需要一个特殊的原因把它放在if声明中

+0

它仍然实例化超过3次。基本上,玩家踢一个尸体,一枚硬币出来。在玩家踢了3次尸体后,我希望玩家不能再从身上收集硬币。 –

+0

那么每踢1个硬币? – SDSMTKyzer

+1

这是正确的,我的好人。 –

1

试试这个:

public void Looted() 
{ 
    if (!pay && kicked) { 

     pay = true; 
     Instantiate (coinPrefab, coinSpawn.position, coinSpawn.rotation); 
     kicked = false; 
     pay = false; 
     for (int i = 1; i <= 3; i++) 
     {  
      Debug.Log ("$$$$$$$$$"); 
     } 
    } 
} 

看到for条件的差异。把它想象成“只要这个条件成立就做这个循环。”由于i从1开始并在语句i++结束时递增,因此它将按照您的预期运行三次。

这是比较常见和惯用虽然说

for (int i = 0; i < 3, i++) 

,除非有需要计数从1开始的

+0

相关提示它仍然在做。每次付款都是真实的,它仍然在实例化硬币。感谢您的信息,但 –