なぜ?
chatGpt
質問に答えましょう。
C# ゲーム開発では、次の問題が発生する可能性があるため、public を使いすぎることはお勧めしません。
- カプセル化:
public
変数とメソッドは、他のクラスから直接アクセスおよび変更できるため、コードのカプセル化が減少し、コードの保守と拡張が困難になります。 - セキュリティ: パブリック変数とメソッドは、不正なアクセスや変更に対して脆弱であり、ゲームのセキュリティを損なう可能性があります。
- 保守性: 使いすぎると
public
、特定の変数やメソッドを変更する必要がある場合に、大量のコードを変更する必要があり、コードの保守が難しくなります。
したがって、private
またはを使用してprotected
変数とメソッドのアクセス スコープを制限すると、コードのカプセル化、セキュリティ、および保守性を向上させることができます。
例:
public class TestingGenerics1 : MonoBehaviour
{
public float speed;
}
//公开后就可以让任意的类在声明类后就可以调用该类的speed变量。
public class SecondTest{
private TestingGenerics1 testingGenerics1;
private void TestFunction(){
//修改
testingGenerics1.speed=10f;
}
}
Unity
しかし、公に調整できるという利点を失いたくないので、次のように書き直すことができます。
[SerializeField] private float speed;
しかし、これでも他のクラスがこのクラスにアクセスして変更することはできません. Android とはまだ異なることがわかりますpublic
. このような機能は、同じゲームの共同開発に非常に適しています.
[SerializeField]
それは何ですか
シリアル化とは何かを知る必要があります
C#
( serialization ) のシリアル化とは、オブジェクトをバイト文字列に変換する操作を指します。
Unity の優れた点は、シリアル化可能なフィールドをInspector
バーです。
トピックに戻る
[SerializeField]
は実際にはフィールドがシリアライズ可能であることを示す属性ですが、追加してもすべてがインスペクターにアクセス可能に[SerializeField]
なるわけではありません。
public class Test : MonoBehaviour
{
// static
[SerializeField] static string sampleField_1;
// get and set
[SerializeField] string sampleField_2 {
get; set; }
// UnityEngine.Object
[SerializeField] Sample sampleField_3;
}
class Sample {
}
追加拡張
という
VariableA
変数を作成し、公開したいが、inspector
この変数を表示したくないとしましょう。
[System.NonSerialized] public int VariableA;