2016-09-10 2 views
0

gameobject은 내 장면에서 7f 또는 8f에 대해 일시 중지하고 2f에서 일시 중지하려면 자체적으로 gameobject이 필요합니다. 내가 가지고있는 스크립트는 열쇠로 일시 정지시키는 것입니다. 그러나 나는 시도하고, 광범위하게 대답 할거야,GameObject를 몇 초 동안 일시 중지하고 unity3d에서 2 초 후에 일시 중지하지 않으려면

{ 

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

당신은 당신이 당신이 P를 누르면 7 또는 8 초 동안 일시 정지 의미합니까 "7 층 또는 8 층 내 장면에서 자신의 일시 중지"가 무슨 뜻인지 명확히 할 수 있습니까? 그런 다음 2 초 동안 일시 중지 해제합니까? 이 자동 동작을 달성하기 위해 이미 시도한 것은 무엇입니까? –

+0

아니요. 게임을 7 초 동안 일시 중지하고 그 자체로 일시 중지하고 싶습니다. 잠깐 멈추기 위해 열쇠를 누르기 싫어. –

답변

0

그것은 너무 분명하지 않다 : 여기 내 스크립트입니다 도와 줘.

당신은 외부에서 당신이 그것을 비활성화 할 수 있습니다 하나의 게임 오브젝트를 일시 중지하고이 코드를 적절하게 활성화 whant 경우 내부적으로는 부울을 만들 수있는 게임 오브젝트를 일시 정지하려면 대신하는 경우 gameObject.SetActive(false);

및 업데이트에 거세한 숫양을 테스트하거나하지 그건 사실이야 :

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.timeScale0에을 설정하거나 모든 게임 오브젝트를 일시 중지 할 수 있습니다를 일시 정지합니다.

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; 
     } 
    } 
} 
+0

스크립트를 업데이트했습니다. 나는 무엇을 바꾸어야합니까. –

+0

알았어, 작동하는지 알려주세요. –

0

당신은 사용할 수 있습니다 루프 update()에 지연을 삽입하려면 coroutines을 입력하십시오. 코 루틴은 "반환"하는 기능/방법보다는 "산출"하는 발전기를 사용합니다. 이것이 허용하는 것은 비동기 적으로 작동하면서 선형 방식으로 작성되는 코드입니다.

가장 많이 찾고있는 내장 된 coroutine은 WaitForSeconds입니다. 코 루틴을 시작하려면 StarCoroutine()을 호출하고 IEnumerator 유형의 모든 메소드를 전달하면됩니다. 이 방법은 주기적으로 yield이됩니다. 다음 예제에서는 WaitForSeconds(5)이 5 초 후에 출력됩니다. floats로 표현되는 초의 분수도 사용할 수 있습니다. 예를 들어 2.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 
    } 
} 
관련 문제