2016-12-08 2 views
1

Я строю игру, такую ​​как рулонная игра с мячом на уроках на веб-сайте Unity, теперь я сосредоточен на меню игры, когда игрок теряет всю свою жизнь. Я активирую текст, текст да и нет, а rawImage, отображаемый по умолчанию по дате, - это то, что я хочу, чтобы изображение, находящееся за текстом да, уменьшалось до да и до да с помощью клавиш со стрелками. Я думаю, что я реализовал это правильно с помощью ключей, но мне кажется, что мне нужна сопрограмма, чтобы построить это, потому что она просто оставляет функцию игры, не дожидаясь ввода пользователя, поэтому после этого, как я могу построить это в правильном режиме?Unity Coroutine для игрыMenu

Я сделал это на данный момент:

public class Manager : MonoBehaviour { 

private float checkPoint = 0; 
public GameObject Ball; 
private GameObject cam; 
private Object newBall; 
public int lifes; 
public Text Lifetext; 
private bool gameIsOver = false; 
private Text gameOver; 
private Text playAgain; 
private Text yes; 
private Text no; 
private RawImage TopMenuBall; 


void Awake(){ 
    Lifetext = GameObject.Find("Lifes").GetComponent<Text>(); 
    gameOver = GameObject.Find("GameOver").GetComponent<Text>(); 
    playAgain = GameObject.Find("PlayAgain").GetComponent<Text>(); 
    yes = GameObject.Find("Yes").GetComponent<Text>(); 
    no = GameObject.Find("No").GetComponent<Text>(); 
    TopMenuBall = GameObject.Find("TopMenuBall").GetComponent<RawImage>(); 

    gameOver.enabled = false; 
    playAgain.enabled = false; 
    yes.enabled = false; 
    no.enabled = false; 
    TopMenuBall.enabled = false; 
    TopMenuBall.transform.localPosition = new Vector3(-68,-41,0); 

} 

void Start(){ 
    lifes = 3; 
    Lifetext.text = " x" + lifes; 
    SpawnBall(); 
    cam = GameObject.Find ("Main Camera"); 

} 

public void LifeUp(){ 
    lifes++; 
    Lifetext.text = "X " + lifes; 
} 

public void LifeDown(){ 
    if (lifes <= 0) { 
     GameOver(); 
    } else { 
     lifes--; 
     Lifetext.text = "X " + lifes; 
    } 
} 

public void GameOver(){ 
    Debug.Log ("gameover"); 
    gameOver.enabled = true; 
    playAgain.enabled = true; 
    yes.enabled = true; 
    no.enabled = true; 
    TopMenuBall.enabled = true; 

    if (Input.GetKeyDown (KeyCode.DownArrow)) { 
     TopMenuBall.transform.localPosition = new Vector3 (-68, -82, 0); 
     Debug.Log ("up"); 
    } 
    else if (Input.GetKeyDown(KeyCode.UpArrow)) 
     TopMenuBall.transform.localPosition = new Vector3(-68,-41,0); 
} 

void SpawnBall(){ 
    Vector3 spawnPosition = new Vector3 (0.02f,1.4f,-39f); 
    Quaternion spawnRotation = Quaternion.identity; 
    newBall = Instantiate (Ball, spawnPosition, spawnRotation); 
    Camera.main.GetComponent<cameraMove>().player = (GameObject)newBall; 
} 

, когда пользователь теряет все жизней он входит в функцию GameOver и есть проблема, как я могу решить эту проблему?

+0

почему corotine? вы можете просто использовать 'Vector3.Lerp', чтобы просто перемещать изображение. –

+0

Я хочу сделать это на моем ясли, как я могу это сделать? –

ответ

2

Вы должны использовать метод Update() для получения пользовательских входов. Потому что вам нужно, чтобы он постоянно проверялся, и метод Update существует точно для такого рода ситуаций, как только он вызывается каждый кадр.

Итак, ваш код должен выглядеть следующим образом:

void Update() { 
    if (TopMenuBall.enabled) { 
     if (Input.GetKeyDown (KeyCode.DownArrow)) { 
      TopMenuBall.transform.localPosition = new Vector3 (-68, -82, 0); 
      Debug.Log ("up"); 
     } 
     else if (Input.GetKeyDown(KeyCode.UpArrow)) 
      TopMenuBall.transform.localPosition = new Vector3(-68,-41,0); 
    } 
} 
+0

Большое спасибо за этот ответ, это имеет смысл, но только один последний вопрос, например, я хочу, что внутри этой функции обновления запускается только тогда, когда она является гейвервью, и в этом случае, если она работает каждый кадр, даже если она а не gameover он работает –

+0

Вот почему я добавил команду «if (TopMenuBall.enabled)». Таким образом, этот вход будет проверяться только тогда, когда он включен (что я видел, что вы включаете только функцию GameOver). Вы также можете использовать другую переменную, возможно, создать логическое значение, которое вы установите только в нужное время. –

+0

Я сделал это, друг, большое спасибо за вашу помощь :) –

 Смежные вопросы

  • Нет связанных вопросов^_^