3 回答

TA貢獻1865條經驗 獲得超7個贊
調用函數 Attack() 和 this.Attack 有什么區別?
例如,當您編寫類 Player 并且想要使用方法“Attack()”時,您可以通過鍵入 Attack() 或 this.Attack() 來實現。它在兩種情況下都做同樣的事情。
當你使用“這個”時。你保證你使用的方法是在你所在的類上實現的。例如:
public void GroupAttack(DifferentPlayer ally){
Attack();
ally.Attack();
}
public void GroupAttackWithThis(DifferentPlayer ally){
this.Attack();
ally.Attack();
}
GroupAttack 和 GroupAttackWithThis 方法之間沒有區別。
我使用隨機名稱 nexus 創建了 Player 類的對象。但是,當我從不同的類調用函數時,我似乎使用了類名而不是這個變量名。那么創建變量名的目的是什么?
發生這種情況是因為您將函數“Move”設為靜態,這意味著對于該類的每個實例,它都會執行完全相同的操作。當您希望一個方法或一個變量對于類的每個實例每次都具有相同的值或具有相同的行為時,使用靜態。如果您的方法不是靜態的,您將需要使用變量的名稱來使用它,那是因為您希望您的方法為每個實例更改他的行為。一個簡單的例子:
public string GetName(){
return name;
}
此方法將為每個玩家返回一個不同的名稱(將在變量中返回玩家的名稱)。所以如果你這樣做:
Player jhon = new Player();
jhon.name = "Jhon";
String jhonsName = jhon.GetName();
變量“jhonsName”將包含一個值為“Jhon”的字符串。
我希望這對您有用,并祝您游戲愉快。

TA貢獻2041條經驗 獲得超4個贊
Unity MonoBehaviour 與普通 C# 類之間存在一些差異。我建議觀看一些 Unity 教程。Unity 腳本是面向場景的。
沒有區別。this.Something可用于將某物標記為“來自類對象”(通常為屬性或變量)以與參數區分開來。
編寫Player nexus = new Player(); 應該是警告,因為您不應該使用 MonoBehaviour 執行此操作。
您可以通過將腳本“播放器”放在游戲對象上來在場景中創建播放器。您應該從 GameObject 訪問 Player 腳本。所以你應該刪除方法上的“靜態”。然后放公共Player播放器;在 UsingStuff 內部(在公共類 UsingStuff 下:MonoBehaviour {)。然后將您的播放器拖到播放器的占位符上。您將在場景中使用 UsingStuff-Script 的 GameObject 上找到它?,F在您可以在 Start 方法中調用 player.Move()(帶有小 p)。
為您的變量名稱嘗試另一種命名方式。它已經存在于每個 MonoBehaviour 中。它指的是腳本所在的游戲對象的名稱。您的命名也應該拋出一個警告。

TA貢獻1853條經驗 獲得超18個贊
執行時Player nexus = new Player();
,您正在創建類型 (/class)“Player”的新實例 (/object)。該變量nexus
是一個對象引用(即,它指的是您剛剛創建的對象實例)。一旦你有了一個實例,你就可以在那個對象上調用實例方法,設置或讀取它的屬性(順便說一下,你沒有)。由于對該對象(nexus
變量)只有一個引用,當該引用超出范圍(在函數結束時)時,該對象不再被任何對象引用并且有資格進行垃圾回收。
當您使用static
關鍵字聲明一個方法 (/function) 時,您是在類級別而不是在實例級別創建它。如果你想調用非靜態的Update
orAttack
方法,你必須說nexus.Update
or nexus.Attack
。要調用靜態Using
或Move
方法,您可以使用類名 (Player),如下所示:Player.Using
或Player.Move
。
您發布的代碼無法編譯,是嗎?您不能從靜態方法調用實例方法。您不能調用實例方法Attack
或this.Attack
靜態方法Using
(那里沒有“this”(this
是與實例方法關聯的當前對象實例))。最好發布至少可以編譯的代碼(除非你說(在評論中)//this is the code that doesn't compile
您還只在Start
方法中創建了一個新的 Player 實例,這有點奇怪。通常,您在其他類或靜態工廠方法中創建對象的實例(并非總是如此,但通常如此)。
閱讀面向對象編程的本質、C# 的static
關鍵字和對象實例的本質(一般而言)。您可能還想閱讀 C# 的屬性。
哦,Using
從長遠來看,命名某些東西會受到傷害(小寫using
是一個 C# 關鍵字,已經有兩個含義)。
最后,回答你的問題,“以這種方式調用實例方法:Attack()
或那樣:this.Attack()
具有相同的語義?!?nbsp;當然,如上所述,如果您嘗試從靜態方法調用實例方法,則不能使用任何一種形式。
- 3 回答
- 0 關注
- 196 瀏覽
添加回答
舉報