2014-10-28 4 views
0

일부 애니메이션이 포함 된 게임을 작성하고 사용자가 버튼을 클릭 할 때 해당 애니메이션을 사용합니다. 나는 사용자에게 애니메이션을 보여주고 싶습니다. Application.loadLevel로 새로운 레벨을 "그냥"호출하는 것이 아닙니다. onMouseUp 메서드에서 Time.DeltaTime을 사용하여 미리 정의 된 0f 값에 추가 한 다음 (예 : 1f)보다 큰지 확인하지만 onMouseUp 메서드가 "그것이 자신의 시간 "을 델타 시간으로 간주합니다.OnMouseUp 이벤트를 수행하기 전에 몇 초 동안 기다리는 방법

내 스크립트는이 지금과 같은 : 당신의 onMouseUp에에 Time.deltaTime을 사용하여 일을하려고 무엇을

public class ClickScriptAnim : MonoBehaviour { 

public Sprite pressedBtn; 
public Sprite btn; 
public GameObject target; 
public string message; 
public Transform mesh; 
private bool inAnim = true; 
private Animator animator; 
private float inGameTime = 0f; 

// Use this for initialization 
void Start() { 
    animator = mesh.GetComponent<Animator>(); 
} 



// Update is called once per frame 
void Update() { 

} 

void OnMouseDown() { 
    animator.SetBool("callAnim", true); 

} 

void OnMouseUp() { 
    animator.SetBool("callAnim", false); 
    animator.SetBool("callGoAway", true); 
    float animTime = Time.deltaTime; 

    Debug.Log(inGameTime.ToString()); 
// I would like to put here something to wait some seconds 
     target.SendMessage(message, SendMessageOptions.RequireReceiver); 
     } 
    } 
} 
+0

Thread.Sleep (1000)은 잠시 기다려야 할 것입니다.이 줄을 따라 무엇인가 찾고 있습니까? – Bayeni

+0

잠시 기다려 봤던 코드는 어디에 있습니까? – Reniuz

+0

필자가 작성한 것처럼 onMameUp() 메서드에 inGameTime + = Time.deltaTime을 넣으려고했으나 OnMouseUp 메서드가 최소 deltaTime을 반환하기 때문에 의도 한대로 작동하지 않습니다. – Zwiebel

답변

1

임 완전히 확실하지 않다. 이것은 마지막 프레임이 렌더링 된 이후의 시간 (초)이며 액세스하려는 위치와 상관없이 동일하게 작동해야합니다. 일반적으로 onMouseUp과 같은 일회성 이벤트가 아니라 모든 프레임이라고하는 함수에서 사용됩니다.

은 당신이 달성하려고하는 어떤 특정되지 않는에도 불구하고, 당신이 호출 사용해야 같은 소리 :

http://docs.unity3d.com/ScriptReference/MonoBehaviour.Invoke.html

그냥 별도의 함수로 지연 될하고자하는 코드를 삽입 한 다음 호출 그 기능은 onMouseUp의 지연과 함께 작동합니다.

편집 : 다른 사람들이 여기서 말한 내용을 백업하려면이 경우 Thread.Sleep()을 사용하지 않을 것입니다.

1

Coroutine을 사용하여 Update 루프를 차단하여이 작업 (그리고 게임이 "정지"상태로 나타나지 않는 모든 대기 기능)을 수행하려고합니다.

다음은 아마도 당신이 찾고있는 샘플입니다.

void OnMouseUp() 
{ 
    animator.SetBool("callAnim", false); 
    animator.SetBool("callGoAway", true); 

    //Removed the assignement of Time.deltaTime as it did nothing for you... 

    StartCoroutine(DelayedCoroutine()); 
} 

IEnumerator DoSomethingAfterDelay() 
{ 
    yield return new WaitForSeconds(1f); // The parameter is the number of seconds to wait 
    target.SendMessage(message, SendMessageOptions.RequireReceiver); 
} 

은 예를 바탕으로 당신이을 수행하고 싶지만 위의 예는 유니티 3D의 지연 후 뭔가를 할 수있는 "올바른"방법이 무엇인지 정확히 을 결정하기가 어렵습니다. 애니메이션을 지연시키고 싶다면 SendMessage 호출을 호출하면 코 루틴에 호출 코드를 놓기 만하면됩니다.

코 루틴은 게임의 Update 루프와 다소 유사한 자체 게임 루프에서 시작됩니다. 이것들은 많은 다른 것들을 위해 매우 유용하며 일종의 "쓰레드"(비록 실재하지는 않지만)를 제공합니다.

참고 :
유니티에서 Thread.Sleep()을 사용하지 마십시오, 그것은 말 그대로 게임 루프를 동결하고 나쁜 시간에하는 경우에 충돌이 발생할 수 있습니다. Unity 게임은 모든 라이프 사이클 이벤트 (Awake(), Start(), Update() 등 ...)를 처리하는 단일 스레드에서 실행됩니다. Thread.Sleep()을 호출하면 반환 될 때까지 이러한 이벤트의 실행이 중지되고 게임이 멈추고 사용자 환경이 좋지 않을 것으로 예상되므로 사용자가 찾고있는 것이 아닐 가능성이 큽니다.

관련 문제