J'essaye de faire un prototype de machine à sous. Mon but est de simuler (par programmation) le mouvement des symboles. Je veux que mes symboles descendent et quand chaque symbole sort du champ de jeu, il devrait être de nouveau déplacé vers le haut du cadre. Voici mon code:Unity boucle infinie de sprites mobiles (bobine de machine à sous)
public class Reel : MonoBehaviour {
public int reelHeight = 3;
public int symbolWidth = 3;
public int symbolHeight = 3;
public float reelSpeed = 1000;
[SerializeField]
public GameObject symbol;
public List<GameObject> symbols = new List<GameObject>();
private bool inSpin = false;
void Start() {
// reel predefined symbols
int[] reelSymbols = new int[] { 0, 0, 0, 0, 1, 2, 1, 3, 4, 5}; //{0,0,0,0,1,1,1,2,2,3,3,3,4,4,4,4,1,5,5,5,5,2,2,6,6,6,6,3,7,7,7,7};
// instantiating symbols on reel
for (int i = 0; i < reelSymbols.Length; i++) {
symbol = Instantiate (symbol, new Vector3 (0, i*symbolHeight, 0), Quaternion.identity);
symbol.GetComponent<Symbol>().symbolType = reelSymbols [i];
symbols.Add (symbol);
}
}
public void SpinReel() {
inSpin = !inSpin;
}
void Update() {
// infinite spin
if (inSpin) {
foreach (GameObject symbol in symbols) {
// moving symbols down
float currentReelSpeed = reelSpeed * Time.deltaTime;
symbol.transform.Translate(Vector3.down * currentReelSpeed);
// move symbol up to the top if it's go down and no longer vidible
if (symbol.transform.position.y <= -3.0f) {
float newY = ((symbols.Count - 1) * symbolHeight) + transform.position.y;
symbol.transform.position = new Vector3 (transform.position.x, symbols.Count*symbolHeight, transform.position.z);
}
}
}
}
}
Mon symbole est un gameobject régulier:
public class Symbol : MonoBehaviour {
public Sprite [] sArray;
public int symbolType;
// Use this for initialization
void Start() {
GetComponent<SpriteRenderer>().sprite = sArray [symbolType];
}
// Update is called once per frame
void Update() {
}
}
Alors, mes symboles se déplacent mais après le plus bas symbole remonte à nouveau, l'écart entre les symboles n'est pas le même.
Si quelqu'un a l'expérience dans la fabrication de machines à sous, s'il vous plaît le partager avec moi. Merci et une belle journée
Au premier regarder votre problème semble être lié à la fonction 'Translate' car après beaucoup d'itérations vous allez sûrement perdre de la précision à l'inexactitude en virgule flottante - d'un autre côté, il semble un peu trop extrême pour être la seule explication, donc je ne suis pas encore sûr à 100%, je vais essayer de le reproduire. –
Vous calculez 'newY' mais vous ne l'utilisez pas. Vous définissez toujours le y sur 'symbols.Count * symbolHeight'. Ça pourrait être ça. – Pluto