Appearance
访问修饰符
访问修饰符是什么
访问修饰符就是控制“谁能访问这段代码”的关键字。它可以放在类、字段、属性、方法前面。
c
public class PlayerController : MonoBehaviour
{
private int hp;
public int Hp { get; private set; }
public void TakeDamage(int damage)
{
Hp -= damage;
}
private void Die()
{
gameObject.SetActive(false);
}
}这里的意思是:
public:外部可以用。 private:只有这个类自己能用。 public get; private set;:外部能读,只有自己能改。
最常用的 4 个
public:公开给外部使用。比如其他脚本需要调用 TakeDamage()。
c
public void TakeDamage(int damage) { }private:只在自己类内部使用。字段和辅助方法默认优先用它。
c
private int hp;
private void Die() { }protected:自己和子类可以用。适合继承,比如 Enemy 和 BossEnemy。
c
protected virtual void OnDead() { }internal:同一个程序集能用。Unity 里通常和 Assembly Definition、插件、框架模块有关,初学阶段知道即可。
c
internal class DamageCalculator { }Unity 里最重要的区别
代码访问权限和 Inspector 是否可见,不是一回事。
不太推荐这样长期写:
c
public float moveSpeed = 5f;因为它既会显示在 Inspector,也会让其他脚本随便改。
Unity 更推荐:
c
[SerializeField] private float moveSpeed = 5f;意思是: Inspector 里可以调参数,但其他脚本不能随便访问它。
这就是 Unity 里很常见的写法:
c
public class PlayerController : MonoBehaviour
{
[SerializeField] private float moveSpeed = 5f;
public int Hp { get; private set; } = 100;
private Rigidbody rb;
private void Awake()
{
rb = GetComponent<Rigidbody>();
}
public void TakeDamage(int damage)
{
Hp -= damage;
if (Hp <= 0) Die();
}
private void Die()
{
gameObject.SetActive(false);
}
}新手记忆法
字段:默认 private。 要在 Inspector 调:[SerializeField] private。 别人需要调用的方法:public。 只给子类扩展:protected。 只想让外部读,不想让外部改:public get; private set;。
参考链接