我有一個Unity專案(游戲),主要邏輯都在一個檔案中。我不想使用Unity標簽,因為問題肯定更多C# oriented,但知道主類已經繼承很有用MonoBehaviour。
我想做的是以最好的方式將主類拆分為多個類,并盡可能少地修改代碼。
下面的代碼代表了現在的結構(顯然代碼是為示例而發明的)。
public class Main : MonoBehaviour {
public OtherClass1 otherClass1;
private OtherClass2 otherClass2;
public String var1;
private String var2;
void Start() {
}
public void Func1() {
var1 = "test";
var1 = Func2(var1);
}
private void Func2(string _var1) {
return "random" _var1 var2;
}
// And other 2.500 rows of funcuntions...
}
這是我能做的最好的,但我希望有人有更好和更清潔的解決方案。
public class Main : MonoBehaviour {
public OtherClass1 otherClass1;
private OtherClass2 otherClass2;
public String var1;
private String var2;
private InitGame initGame;
void Start() {
initGame = new InitGame();
}
public void Func1() {
var1 = "test";
var1 = initGame.Func2(this, var1);
}
// And other 2.500 rows of funcuntions...
}
public class InitGame() {
private void Func2(Main _main, string _var1) {
return "random" _var1 _main.var2;
}
// And all other function relative to the game initialization...
}
理想的情況是創建可以直接訪問 Main 的所有內容(變數、函式、類)的類,而無需傳遞參考。
謝謝
uj5u.com熱心網友回復:
您可以使用部分類。分部類只是其代碼在多個代碼檔案中溢位的類。類的每個部分都可以訪問所有部分的所有成員。此方法用于 winforms 表單。一個檔案具有類似的名稱Form1.designer.cs,由表單設計器創建。另一個是命名的,例如,Form1.cs是您放置用戶代碼的地方。
你可以有像
// File: Main.cs
public partial class Main : MonoBehaviour {
}
// File: Main.attackLogic.cs
public partial class Main{
}
// File: Main.defenceLogic.cs
public partial class Main{
}
等等。
但是為特定服務擁有真正獨立的類也是有意義的。特別是如果邏輯和相應的資料是自包含的。如果這些類需要訪問主類的成員,則必須將其傳遞給主類的參考。這最好在建構式引數中完成,并且是一種非常常見的做法。
與主類進行通信的另一種方式是通過用戶定義的事件。例如,您可以讓健康服務公開事件:
public event Action<int> CriticalAlert;
在服務的邏輯中,事件將像這樣觸發
private int _health;
public int Health
{
get { return _health; }
set {
int oldHealth = _health;
_health = value;
if (oldHealth > CriticalLevel && _health <= CriticalLevel) {
CriticalAlert?.Invoke(_health);
}
}
}
然后主類像這樣訂閱事件
_healthService = new HealthService(this);
_healthService.CriticalAlert = HealthService_CriticalAlert;
處理程式如下所示:
private void HealthService_CriticalAlert(int health)
{
...
}
兩種方法(部分類和實類)都可以結合使用。
另請參閱:部分類和方法(C# 編程指南)
uj5u.com熱心網友回復:
部分課程是要走的路。
你甚至可以在它們之間參考一些東西,它們會合二為一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/434501.html
下一篇:使用字串作為列
