Mon script/jeu/chose fait bouger un objet de jeu vers la droite et quand je clique sur la danse (un bouton que j'ai créé) il s'arrête. Ensuite, lorsque le compteur (je n'ai peut-être pas besoin d'un compteur mais je veux attendre 3 secondes) atteint 3 (une fois que vous avez cliqué sur danser, le compteur démarre), mon objet de jeu est supposé continuer en allant vers la droite.
Si vous pouvez corriger le code, ce serait cool. Si vous pouvez le corriger et m'expliquer ce que j'ai fait de mal, ce serait encore plus génial. Je viens de commencer à apprendre le C # sur Unity.
using System;
using UnityEngine;
using System.Collections;
public class HeroMouvement : MonoBehaviour
{
public bool trigger = true;
public int counter = 0;
public bool timer = false;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{ //timer becomes true so i can inc the counter
if (timer == true)
{
counter++;
}
if (counter >= 3)
{
MoveHero();//goes to the function moveHero
}
if (trigger == true)
transform.Translate(Vector3.right * Time.deltaTime); //This moves the GameObject to the right
}
//The button you click to dance
void OnGUI()
{
if (GUI.Button(new Rect(10, 10, 50, 50), "Dance"))
{
trigger = false;
timer = true;//now that the timer is set a true once you click it,The uptade should see that its true and start the counter then the counter once it reaches 3 it goes to the MoveHero function
}
}
void MoveHero()
{ //Set the trigger at true so the gameobject can move to the right,the timer is at false and then the counter is reseted at 0.
trigger = true;
timer = false;
counter = 0;
}
}
Vous pouvez le faire assez facilement avec des coroutines:
void Update()
{
if (trigger == true)
transform.Translate(Vector3.right * Time.deltaTime); //This moves the GameObject to the right
}
void OnGUI()
{
if (GUI.Button(new Rect(10, 10, 50, 50), "Dance"))
{
StartCoroutine(DoTheDance());
}
}
public IEnumerator DoTheDance() {
trigger = false;
yield return new WaitForSeconds(3f); // waits 3 seconds
trigger = true; // will make the update method pick up
}
Voir http://docs.unity3d.com/Documentation/ScriptReference/index.Coroutines_26_Yield.html pour plus d'informations sur Coroutines et comment les utiliser. Ils sont assez soignés lorsqu'ils essaient de faire une série d'événements chronométrés.
Je pense que le moyen le plus simple est d'utiliser Invoke:
if (timer == true) Invoke("MoveHero", 3);
Je préfère utiliser StartCoroutine voici le lien: http://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html
ex:
void Foo () { StartCoroutine (Begin ()); }
IEnumerator Begin ()
{
yield return new WaitForSeconds (3);
// Code here will be executed after 3 secs
//Do stuff here
}
Faites d'abord contre un flotteur. Puis changez counter++;
à counter += Time.deltaTime
. Update () est appelé pour chaque trame donc le compteur sera 3 sur la troisième trame. Time.deltaTime vous donne le temps entre cette image et l'image précédente. Le résumer agit comme une minuterie.