Appearance
作用域
作用域是什么
作用域就是:一个变量、方法、类的名字,在哪些代码范围内能被看见、能被使用。
你可以把 { } 理解成房间:
c
void Update()
{
float move = 1f;
}move 写在 Update() 这个房间里,出了这个房间就不能用了。
局部变量
写在方法里,只能在方法里用:
c
void Update()
{
float speed = 5f;
Debug.Log(speed);
}
// 这里不能用 speed写在 if / for / while 的 { } 里,只能在这个代码块里用:
c
if (hp <= 0)
{
string message = "死亡";
Debug.Log(message);
}
// 这里不能用 message字段 Field
字段写在类里面、方法外面,同一个类里的多个方法都能用:
c
public class Player : MonoBehaviour
{
private int hp = 100;
void TakeDamage(int damage)
{
hp -= damage;
}
bool IsDead()
{
return hp <= 0;
}
}hp 是字段,它属于这个 Player 对象。
参数的作用域
参数只在这个方法内部有效:
c
void TakeDamage(int damage)
{
hp -= damage;
}
// 这里不能用 damagedamage 是外面调用方法时传进来的临时数据。
作用域和访问权限不是一回事
作用域:名字在哪里存在。 访问权限:外部代码能不能访问它。
常见访问修饰符:
c
private // 只有当前类能访问
public // 外部也能访问
protected // 当前类和子类能访问
internal // 同一个程序集能访问Unity 新手推荐:字段默认用 private,需要 Inspector 调整时用:
c
[SerializeField] private float moveSpeed = 5f;这表示:Inspector 能看到,但其他脚本不能随便直接改。
常见坑:同名遮蔽
c
private int hp = 100;
void Start()
{
int hp = 50;
}这里 Start() 里的 hp 是新的局部变量,不是外面的字段。
如果参数和字段同名,可以用 this 区分:
c
private int hp;
void SetHp(int hp)
{
this.hp = hp;
}this.hp 是字段,右边的 hp 是参数。
小练习
写一个 PlayerHealth.cs:
c
[SerializeField] private int maxHp = 100;
private int currentHp;
void Start()
{
currentHp = maxHp;
}
public void TakeDamage(int damage)
{
currentHp -= damage;
}然后想清楚:maxHp、currentHp、damage 分别在哪些地方能被使用。
参考链接: