Why?
让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;
不过这样依旧不允许其他的类对该类进行访问修改,可以看出它跟public还是有区别的,像这样的特性就很适合同一个游戏的合作开发。
[SerializeField]是什么?
我们得知道什么是serialization
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;
在C#游戏开发中,过度使用public可能导致封装性、安全性和维护性降低。通过使用private或protected限制访问,可以增强这些特性。SerializeField允许在UnityInspector中编辑私有字段,而[System.NonSerialized]则能让变量公开但不显示在Inspector上。
633

被折叠的 条评论
为什么被折叠?



