我需要gameobject
在我的场景中暂停7f或8f,并在2f处自行暂停。我的脚本让我按键暂停。这是我的剧本:
{
sing UnityEngine;
using System.Collections;
public class star : MonoBehaviour {
GameObject[] pauseObjects;
void Start () {
pauseObjects = GameObject.FindGameObjectsWithTag("Player");
}
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 :(得分:0)
暂停它的意思并不太清楚你的意思,但我会广泛回答,试着帮助你。
如果您想在外部暂停一个游戏对象,可以停用它并使用以下代码相应地激活它:gameObject.SetActive(false);
相反,如果你想在内部暂停游戏对象,你可以制作一个bool并且在更新测试中是否真的如此:
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;
倒计数变量。
希望我帮助你,
亚历
编辑: 好的,这是脚本,请记住我无法测试它;)
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;
}
}
}
答案 1 :(得分:0)
您可以使用coroutines在update()
循环中插入延迟。协同程序使用生成器来生成&#34;而不是返回&#34;返回的函数/方法。这允许的代码是异步操作的代码,同时仍以线性方式编写。
您最有可能寻找的内置协程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
}
}