2017-12-17 12 views
1

상자를 열고 저장할 때 PC 또는 Android 시스템 시간에 액세스해야하고 그 시간부터 5 분 카운트 다운을 시작해야합니다. 5 분이 지나면 버튼을 다시 활성화하여 상자를 엽니 다. 나는 많은 접근법을 시도했지만 모두 막 다른 길로 인도합니다. 당신이 상자를 업데이트 할 때 당신이 당신의 개방 로직을 구현하는 이유를 모르겠어요Unity 게임 엔진에서 상자 열기 후 C# 카운트 다운

public class Test : MonoBehaviour 
{ 
    public Button boxButton; 
    long previousOpenedBox; 

    private void Update() 
    { 
     if (!boxButton.IsInteractable()) 
     { 
      long diff = (DateTime.Now.Ticks - previousOpenedBox); 
      //start counting down the time to re-enable the button. 
     } 
    } 

    public void BoxClicked() 
    { 
     long previousOpenedBox = DateTime.Now.Ticks; 
     boxButton.interactable = false; 
    } 
} 
+0

사용한 접근 방식 중 하나 이상을 볼 수 있습니까? –

+0

Time.deltaTime으로 카운트 다운하는 타이머를 만들려고했지만 불행히도 플레이어가 게임 중에 카운트 다운되었습니다. 동일한 시나리오를 시도했지만 playerprefs에 결과를 저장했지만 플레이어가 게임을 열 자마자 다시 결과를 저장하고 다시 계산하기 시작했습니다. DateTime.Now를 사용하여 시간을 가져 왔으며 5 분을 더한 다음 버튼을 다시 열어 상자를 열지 만 모든 종류의 오류가 발생합니다. 붙여 넣을 코드가 필요한 경우 더 이상 사용할 수 없지만 도움이 될 경우 다시 만들려고 할 수 있습니다! –

+0

코드에서 수행하는 작업을 설명하는 대신 여기에 관련 부분을 복사하여 붙여 넣기 할 수는 없습니까? –

답변

2

, 당신이 그들을 대신 BoxClicked 방법에 넣어해야합니다. 이 최소 예제는 차단 지연을 처리하는 방법을 보여주고 올바른 경로를 가리켜 야합니다.

public class Test : MonoBehaviour 
{ 
    private DateTime m_LastOpening; 
    public Button m_BoxButton; 

    public void BoxClicked() 
    { 
     DateTime now = DateTime.Now; 

     // 5 minutes elapsed, you can open the box 
     if ((now - m_LastOpening).TotalMinutes > 5) 
     { 
      m_LastOpening = now; 
      m_BoxButton.interactable = false; 
     } 
     else // otherwise you have to wait 
     { 
      // ... 
     } 
    } 
} 
+0

고마워! 내가 할 수있는대로 빨리 제안했던 것을 시험해 볼거야! 나는 TotalMinutes, Miliseconds 등을 추측하며, TimeSpan은 이해하기가 정말로 어렵습니다. 나는 더 열심히 공부할 필요가 있다고 생각합니다. 그것을 구현하려고하면 결과를 게시하기 위해 여기로 돌아올 것입니다. 다시 감사합니다! –

+1

아주 어렵지는 않지만 사실 코드는 좀 간단합니다. 상자가 열리면 현재 시간을 클래스 변수의 어딘가에 저장합니다. 다시 열려고하면 현재 시간과 마지막 여는 시간 사이의 차이가 분 단위로 표시됩니다. 5보다 큰 경우 상자를 열 수 있습니다. –

+1

나는 약간의 수정과 주변 테스트를 통해 내 프로젝트에 적합하게 만들었다. 감사! –