Appearance
封装
封装是什么
封装就是:对象自己的数据,不让外部随便改;外部要操作对象,必须通过你设计好的属性或方法。
坏写法:
c
public int hp = 100;
player.hp = -999; // 外部可以乱改,状态坏掉好写法:
c
[SerializeField] private int maxHp = 100;
public int Hp { get; private set; }
public void TakeDamage(int damage)
{
if (damage <= 0) return;
Hp = Mathf.Max(0, Hp - damage);
if (Hp == 0)
{
Die();
}
}这里的意思是: maxHp 是内部字段,外部不能随便改。 Hp 外部可以读,但不能直接写。 外部想扣血,只能调用 TakeDamage()。 扣血规则、死亡判断,都由 PlayerHealth 自己控制。
Unity 里最重要的封装写法
不要为了让 Inspector 能调,就把字段全写成 public。
推荐:
c
[SerializeField] private float moveSpeed = 5f;它表示: Inspector 里可以调。 其他脚本不能乱改。 这就是 Unity 里非常常见的封装写法。
新手记忆法
字段:默认 private。 Inspector 要调:[SerializeField] private。 外部要读:public get。 外部要改:给一个有意义的 public 方法。 不要让外部直接改核心状态,比如血量、金币、等级、死亡状态。
封装不是“什么都不让别人用”,而是“只开放安全入口”。比如 TakeDamage()、Heal()、AddCoin() 这种方法,比直接暴露 hp、coin 更稳。
参考链接