2017-07-18 16 views
-1

我有以下(相關)碼:統一C#:錯誤試圖調用一個類的功能在更新()時

public class GameController : MonoBehaviour { 

public class Timer 
{ 
    int elapsedTime; 
    int pausedTime; 

    bool isCounting; 
    public void Start() 
    { 
     int startTime = DateTime.Now.Millisecond; 
     while(isCounting) 
     { 
      elapsedTime = DateTime.Now.Millisecond - startTime; 
     } 
    } 
} 

private void Update() 
{ 
    //Debug logging of the timer functions 
    if(startButton.CompareTag("Clicked")) 
    { 
     Timer.Start(); 
    } 

} 

}

此代碼生成以下錯誤:一個對象引用是非靜態字段,方法或屬性'GameController.Timer.Start()`所必需的。我怎樣才能解決這個問題?

(注:此錯誤的原因是,幾乎每一個場景不同,所以這是相當難稱之爲式兩份)

+0

您不能在不實例化的情況下使用類對象。正如你已經聲明瞭你自己的Timer類。從中創建一個對象並使用它。所以經驗法則是任何非靜態類,你要先使用實例化它的對象。閱讀本教程https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/classes – Ramankingdom

+0

可能的重複[C#錯誤:對象引用是必需的非靜態字段,方法或屬性](https://stackoverflow.com/questions/28792986/c-sharp-error-an-object-reference-is-required-for-the-non-static-field-method) – Hellium

回答

5

Update()你打電話Timer.Start();。這是對類Timer的靜態方法的調用。這種靜態方法不存在,因此你會得到錯誤。使該方法成爲靜態是不行的,因爲它使用非靜態成員elapsedTime。然後修復該問題將有一個定時器的實例,並調用這個方法:

public class Timer 
{ 
    int elapsedTime; 
    int pausedTime; 

    bool isCounting; 

    public void Start() 
    { 
     int startTime = DateTime.Now.Millisecond; 

     while(isCounting) 
     { 
      elapsedTime = DateTime.Now.Millisecond - startTime; 
     } 
    } 
} 

public class GameController : MonoBehaviour 
{ 
    // The new member 
    Timer timer = new Timer(); 

    private void Update() 
    { 
     //Debug logging of the timer functions 
     if(startButton.CompareTag("Clicked")) 
     { 
      this.timer.Start(); 
     }  
    }  
} 
+1

Better仍然要在'Start()'生命週期方法內初始化'Timer' – JonE

+0

明白了,謝謝!我不知道我必須實例化課程。 – Shadowtail

-2
public class GameController : MonoBehaviour { 

    public class Timer 
    { 
     int elapsedTime; 
     int pausedTime; 

     bool isCounting; 
     public void Start() 
     { 
      int startTime = DateTime.Now.Millisecond; 

      while(isCounting) 
      { 
       elapsedTime = DateTime.Now.Millisecond - startTime; 
      } 
     } 
    } 

    private void Update() 
    { 
     //Debug logging of the timer functions 
     if(startButton.CompareTag("Clicked")) 
     { 
      Timer.Start(); 
     }  
    } 
} 

你有此問題的兩種選擇

  1. 你必須做的方法靜:

    public static void Start() 
    { 
        int startTime = DateTime.Now.Millisecond; 
    
        while(isCounting) 
        { 
         elapsedTime = DateTime.Now.Millisecond - startTime; 
        } 
    } 
    
  2. 您可以通過創建對象類定時器訪問入手方法:

    Timer obj= new Timer() 
    obj.Start(); 
    
+0

如我在答案中所描述的那樣,使其變爲靜態將無法工作。你爲什麼只是複製他的代碼示例沒有任何修改? –

+0

@RomanoZumbé只是爲了展示如何獲取Start()函數 –

+0

好的,但它的錯誤 –

相關問題