[英]How can I change an instance variable from within a static method?
我正在我的Android游戲中實現Unity3D廣告。 我正在使用Unity提供的幫助程序類來幫助管理不同的事件。
如果用戶觀看了視頻並完成了該視頻,那么我會用玩錢(糖果)獎勵該用戶。 初始化視頻廣告后,將調用此方法:
private static void HandleShowResult (ShowResult result)
{
switch (result)
{
case ShowResult.Finished:
Debug.Log("The ad was successfully shown.");
break;
case ShowResult.Skipped:
Debug.Log("The ad was skipped before reaching the end.");
break;
case ShowResult.Failed:
Debug.LogError("The ad failed to be shown.");
break;
}
}
在課堂注釋中,我說我應該自定義此方法,以根據廣告是否成功展示來執行操作。
如果廣告成功展示,我想更新用戶的糖果。 這是我的CandyManager類,用於更新用戶在游戲中收集或獲得的糖果:
[System.Serializable]
public class CandyManger : MonoBehaviour {
// START
public Text candyBarText;
public Text candyBarTextShadow;
// PLAY
public Text candyBarText2;
public Text candyBarTextShadow2;
public int candy;
void Update(){
candyBarText.text = "" + candy;
candyBarTextShadow.text = "" + candy;
candyBarText2.text = "" + candy;
candyBarTextShadow2.text = "" + candy;
}
}
我想做的是能夠從靜態HandleShowResult()中更新像這樣的糖果:
candyManager.candy = candyManager.candy + 5;
“ candyManager”是CandyManager類的當前實例
如果無法通過靜態方法更新實例變量,那么如何在成功顯示視頻后如何更新它?
首先,沒有什么可以阻止您使用靜態方法對實例對象執行操作,實際上,如果靜態方法位於不同的類中,則執行操作所需執行的操作沒有任何區別 。
要求很簡單,您需要引用要對其執行操作的對象的實例。 關於static
的特別之處在於,它無法訪問有關其類成員的this
引用/指針,因此您仍需要引用該實例才能使其正常工作,而普通的類成員只能使用this
(通常是隱式的)。 )。
因此,找到您的對象並獲取其CandyManager
組件,然后正常調用:
//In the static method
GameObject.Find("MyManagerObject").GetComponent<CandyManager>().UpdateCandy(value);
或類似的東西。 在其他技術中(甚至在Unity中),您可以將引用傳遞給靜態方法。 如注釋中所述,靜態類還可以引發CandyManager
偵聽的事件。
要從靜態成員更新實例字段,必須具有該實例。 一種可能的方式是將存儲CandyManager
實例作為你與類的靜態屬性HandleShowResult
:
public static class MyClass{
private static void HandleShowResult (ShowResult result)
{
//...
//Access to MyCandyManager
}
public static CandyManager MyCandyManager{get;set;}
}
但是在這種情況下,只有一個 CandyManager
實例非常重要。 對於多個實例,更難區分它們。
PS:也可以在CandyManager
類型中存儲靜態屬性。 在這種情況下,請使用單例模式 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.