2016-09-10 3 views
0

Мне нужен gameobject, чтобы сделать паузу самостоятельно в моей сцене для 7f или 8f и без паузы на 2f самостоятельно. Сценарий, который у меня есть, позволяет сделать паузу по ключевому слову. Вот мой сценарий:Как приостановить GameObject в течение нескольких секунд и сделать паузу через пару секунд в единстве3d

{ 

sing UnityEngine; 
 
using System.Collections; 
 

 
public class star : MonoBehaviour { 
 
GameObject[] pauseObjects; 
 

 

 
\t void Start() { 
 
\t pauseObjects = GameObject.FindGameObjectsWithTag("Player"); 
 
\t } 
 
\t 
 

 

 
void pauseGameobject() 
 

 
{ 
 

 
if() 
 

 
{ 
 

 
start coroutine("wait"); 
 

 
} 
 

 
} 
 

 
public ienumenator wait() 
 

 
{ 
 

 
time.timescale = 0; 
 

 
yield return new waitforsceonds(7); 
 

 
time.timesale = 1; 
 

 
} 
 
void pauseGameobject() 
 

 
{ 
 

 
if() 
 

 
{ 
 

 
start coroutine("wait"); 
 

 
} 
 

 
} 
 

 
public ienumenator wait() 
 

 
{ 
 

 
time.timescale = 0; 
 

 
yield return new waitforsceonds(7); 
 

 
time.timesale = 1; 
 

 
}

}

+0

Можете ли вы уточнить, что вы подразумеваете под словом «пауза в моей сцене для 7f или 8f». Вы имеете в виду паузу в течение 7 или 8 секунд, когда вы нажимаете P? А затем не нужно останавливаться всего на 2 секунды? Что вы уже пробовали для достижения этого автоматического поведения? –

+0

№. Я хочу, чтобы игра остановилась на 7 секунд и сама по себе остановилась. Я не хочу нажимать клавишу для паузы. –

ответ

0

Это не слишком ясно, что вы подразумеваете под паузой на это один, но я собираюсь ответить широко, чтобы попробовать и помочь вам.

Если вы whant, чтобы приостановить один игровой объект внешне вы можете отключить его и активировать его в соответствии с этим кодом: gameObject.SetActive(false);

Вместо если вы хотите, чтобы приостановить объект игры внутри вы можете сделать логическое значение и в обновлении проверить Wether или нет, это правда:

using UnityEngine; 
using System.Collections; 

bool update = false 

public class ActiveObjects : MonoBehaviour 
{ 
    void Start() 
    { 
     //Do stuff 
    } 

    void Update() 
    { 
     if(update){ 
      //Do stuff 
     } 
     //decide wether or not to pause the game object 
    } 
} 

Если вы хотите, чтобы приостановить игру, вы можете установить Time.timeScale в 0, или просто приостановить все игровые объекты.

Here вы можете найти, как сделать таймер, все, что вам нужно сделать, это отсчет переменной с помощью timeLeft -= Time.deltaTime;.

Надежда Я помог тебе,

Alex

Edit: Ok, вот сценарий, имейте в виду, у меня нет способа проверить его;)

using UnityEngine; 
using System.Collections; 

public class star : MonoBehaviour { 
GameObject[] pauseObjects; 

public float timer = 7; 

float t = 0; 
bool pause = false; 

void Start() { 
    pauseObjects = GameObject.FindGameObjectsWithTag("Player"); 
    t = timer; 
} 



void Update() { 
    if(pause){ 
     if(t<0){ 
      t=timer; 
      pause = false; 
      time.timescale = 1; 
     }else{ 
      t -= Time.deltaTime; 
      time.timescale = 0; 
     } 
    } 
} 
+0

Я обновил свой сценарий. Я что мне нужно изменить. –

+0

Хорошо, дайте мне знать, если это работает –

0

Вы можете использовать coroutines для ввода задержек в петле update(). В Corouts используются генераторы, которые «дают», а не функции/методы, которые «возвращаются». То, что это позволяет, - это код, который работает асинхронно, все еще записываясь линейным образом.

Встраиваемая сопрограмма, которую вы, скорее всего, ищете, является WaitForSeconds. Чтобы запустить сопрограмму, вы просто вызываете StarCoroutine() и передаете любой метод типа IEnumerator. Этот метод периодически будет yield. В следующем примере WaitForSeconds(5) будет работать через 5 секунд. Также могут использоваться доли секунды, представленные поплавками, например 2,5, составляли бы две с половиной секунды.

using UnityEngine; 
using System.Collections; 

public class WaitForSecondsExample : MonoBehaviour { 
    void Start() { 
     StartCoroutine(Example()); 
    } 

    IEnumerator Example() { 
     Debug.Log(Time.time); // time before wait 
     yield return new WaitForSeconds(5); 
     Debug.Log(Time.time); // time after wait 
    } 
} 
Смежные вопросы