2017-08-26 5 views
0

この質問が尋ねられているのなら、これは非常に簡単かもしれないし、答えが明白かもしれないので、申し訳ありません。を使用して変数にアクセスすると、パフォーマンス効果がありますか?パラメータがc#unity3d

こんにちは私の試合では、すべての参考文献がシングルトンクラスのGameManager.csから得られるいくつかのコード行があります。例えば

:私は使用していますので

public void someFunction() 
{ 
    int a = GameManager.instance.healthController.something_1; 
    GameManager.instance.healthController.updateHealth(); 
    GameManager.instance.healthController.updateArrows(); 
    GameManager.instance.healthController.updateRange(); 
} 

ウィルコードの上には、パフォーマンスに影響を持っています。いくつかの場所で変数や関数にアクセスすることができます。

コーディングスタイルとパフォーマンスを改善するために、変更を加える必要がありますか?

答えて

2
public void someFunction() 
{ 
    int a = GameManager.instance.healthController.something_1; 
    GameManager.instance.healthController.updateHealth(); 
    GameManager.instance.healthController.updateArrows(); 
    GameManager.instance.healthController.updateRange(); 
} 

は、以下のように書き換えることができる:上記のコード

public void someFunction() 
{ 
    var controller = GameManager.instance.healthController; 
    int a = controller.something_1; 
    controller.updateHealth(); 
    controller.updateArrows(); 
    controller.updateRange(); 
} 

ウィル私が使用していますので、パフォーマンスに影響があります。 にアクセスし、いくつかの場所で変数と関数にアクセスします。

パフォーマンスがわずかより良いコードの私の提案したバージョンとなります(それはinstancehealthController「を見上げ」維持する必要がないので) - local variables are faster以来。実際には、それは非常にあなたはそれに気づくことはありません。

2

コーディングスタイルとパフォーマンスを改善するために何か変更する必要があるかどうかを確認します。

いいえ。あなたのコードは正常に見えます。 1つのインスタンスが必要な場合は、このようにします。 ではなく、がゲームのパフォーマンスに影響します。あなたが別のスクリプトへのアクセスについてを心配する必要があり何

を繰り返しはスクリプトを見つけることがGetComponent<HealthController>()またはGameObject.FindXXX()を行う代わりに、それらをキャッシュするが、あなたがいることなので、その罰金を行っていないです。

-3

はい、変数「a」をクラスレベルでメソッドから宣言できると思います。次に、メソッドが呼び出されるたびに変数を作成しないでください。

ゲームのプログラミングでは良い練習です。

private int a; 
    public void someFunction() 
    { 
     a = GameManager.instance.healthController.something_1; 
     GameManager.instance.healthController.updateHealth(); 
     GameManager.instance.healthController.updateArrows(); 
     GameManager.instance.healthController.updateRange(); 
    } 
関連する問題