Skip to content

访问修饰符

unity-csharp-access-modifiers-system

访问修饰符是什么

访问修饰符就是控制“谁能访问这段代码”的关键字。它可以放在类、字段、属性、方法前面。

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:自己和子类可以用。适合继承,比如 EnemyBossEnemy

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;

参考链接

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0