前端程序员unity学习笔记01: 从c#开始的入门,using命名空间,MonoBehaviour,static,public

我们首先在unity中新建一个c#文件,这是最基本的样式:如下图

一.using命名空间

using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句

using UnityEngine是- 命名空间声明(Namespace declaration),相当于C语言的include或者前端的import,总之就是导包,导入unity所需要的包,术语是【导入命名空间】


二. MonoBehaviour

unity中新创建的脚本会默认继承MonoBehaviour类


静态变量

静态变量 :关键字static。 静态变量的核心特点

  1. 全局唯一性

    静态变量属于类本身,而非类的实例。无论创建多少个实例,静态变量只有一份拷贝。

  2. 内存常驻

    静态变量在程序启动时初始化,生命周期持续到程序结束,因此可跨场景保留数据。

  3. 直接访问

    无需创建实例,可通过类名直接访问(如 ClassName.StaticVariable)。

    静态变量在 Unity 中是一把双刃剑:

    优点 :简化全局访问、跨场景数据传递、减少实例开销。

    缺点:内存管理风险、耦合度高、测试困难。


三. public

在 Unity 中,public 是一个访问修饰符,主要用于控制类成员(变量、方法、属性等)的可见性和可访问性。它在 Unity 开发中有以下核心作用:

1. 在 Inspector 面板中显示变量

Unity 会自动将 public 变量暴露在 Inspector 面板中,允许开发者在编辑器中直接配置数值,无需修改代码。这对于调整游戏参数(如速度、生命值、引用对象等)非常方便。

2. 允许其他脚本访问和修改

public 成员可以被同一项目中的其他类直接访问,这是组件间通信的基础。

``

csharp 复制代码
// 脚本A:定义公共变量 
public class HealthSystem : MonoBehaviour { 
public int currentHealth = 100;
public void TakeDamage(int amount) { 
currentHealth -= amount; 
} } 

// 脚本B:访问脚本A的公共变量和方法 
public class EnemyAttack : MonoBehaviour {
public HealthSystem targetHealth;// 在Inspector中赋值 
public void Attack() { 
targetHealth.TakeDamage(20);// 直接调用公共方法 
Debug.Log("Target health: " + targetHealth.currentHealth);// 直接访问公共变量 } }

3. 定义类的公共接口

通过 public 方法和属性,可以明确类的外部可调用 API,隐藏内部实现细节。

csharp 复制代码
public class AudioManager : MonoBehaviour {

// 私有字段:内部实现细节
private AudioSource musicSource; 

// 公共属性:外部访问的接口 
public float Volume { 

get { return musicSource.volume; }
set { musicSource.volume = Mathf.Clamp(value, 0f, 1f);
  } 
} 

// 公共方法:外部可调用的功能 public void PlayMusic(AudioClip clip) { 
musicSource.clip = clip;
musicSource.Play(); 
} }

4. 序列化非公共变量 (常用)

若希望非 public 变量也在 Inspector 中显示,可使用 [SerializeField] 属性,但 public 变量无需此属性。

csharp 复制代码
public class Example : MonoBehaviour {

[SerializeField] 
private int privateValue; // 私有变量,但在Inspector中可见 

public int publicValue; // 公共变量,默认在Inspector中可见 

}

5. 与继承结合使用

public 成员可被派生类继承和重写(需配合 virtualoverride 关键字)。

csharp 复制代码
public class Animal : MonoBehaviour { 
public virtual void MakeSound() 
// 公共虚方法 { Debug.Log("Animal sound"); 
    } 
} 

public class Dog : Animal 
{ 
    public override void MakeSound() // 重写公共方法 {
        Debug.Log("Woof!"); 
       }
}

使用注意事项

  1. 谨慎暴露敏感数据

    避免将需要保护的内部状态设为 public(如密码、游戏逻辑核心变量),建议使用 private 配合 public 属性访问。

  2. 性能考虑

    频繁访问 public 变量可能比访问局部变量稍慢(涉及反射),但在大多数情况下可忽略不计。

  3. 替代方案

    • 若只需在 Inspector 中显示,无需外部访问,可使用 [SerializeField] private
    • 若需外部访问但不想暴露在 Inspector 中,可使用 private 配合 public 属性。

总结

public 在 Unity 中的核心价值是:

  • 可视化配置:通过 Inspector 面板快速调整参数。

  • 组件通信:实现不同脚本间的数据传递和方法调用。

  • 接口设计:定义类的公共 API,封装内部实现。

合理使用 public 可以提高开发效率,但需注意控制访问范围,遵循面向对象的封装原则。


四. 静态变量和实例变量的区别

csharp 复制代码
public class Player
{
    // 静态变量:所有玩家共享同一分数
    public static int TotalPlayers = 0;
    
    // 实例变量:每个玩家有自己的生命值
    public int Health = 100;

    public Player()
    {
        TotalPlayers++; // 每次创建玩家时增加总数
    }
}

五. static和public的区别

csharp 复制代码
public class Player { 
// 静态变量:所有玩家共享同一分数
public static int TotalPlayers = 0; 
// 实例变量:每个玩家有自己的生命值 
public int Health = 100; 
public Player() { 
TotalPlayers++; // 每次创建玩家时增加总数 
 } 
} 

// 使用示例 
public class GameManager { 
public void StartGame() {
Player p1 = new Player();
Player p2 = new Player(); 
Debug.Log(Player.TotalPlayers); // 输出:2(所有玩家共享) 

Debug.Log(p1.Health); // 输出:100(实例独立) 

p1.Health = 80; 
Debug.Log(p2.Health); // 输出:100(p2的Health不受影响)

} }

在 Unity 中的典型应用场景

static 的常见用途

  1. 全局管理器 :实现单例模式(如 AudioManager.Instance)。
  2. 工具方法 :无需实例化的辅助函数(如 Mathf.Clamp())。
  3. 跨场景数据 :静态变量可在场景切换时保留数据(如 GameState.Level)。

public 的常见用途

  1. Inspector 暴露 :让变量在 Unity 编辑器中可见,便于配置(如 public GameObject target)。
  2. 组件通信:允许其他脚本访问和修改当前实例的属性。
  3. 接口设计:定义类的公共 API,供外部调用。

特殊注意事项

  1. public 静态变量在 Inspector 中的行为

    • Unity 会为每个脚本实例显示一个静态变量的副本,但修改任何一个都会影响全局值(易混淆,不推荐这样用)。
  2. 静态引用 MonoBehaviour 组件

    • 静态变量若引用 MonoBehaviour 组件(如 GameObject),需确保在使用前已正确初始化,否则可能导致空引用。
  3. 内存管理

    • 静态变量不会被垃圾回收,过度使用可能导致内存泄漏。

总结

  • static 解决的是 "属于类还是实例" 的问题,强调共享性和全局访问。

  • public 解决的是 "能否被外部访问" 的问题,与是否静态无关。

两者可组合使用(如 public static),但功能相互独立。合理搭配这两个修饰符,可以实现灵活的代码架构和组件交互。

相关推荐
Junerver2 分钟前
如何在Jetpack Compose中轻松的进行表单验证
前端·kotlin
3Katrina4 分钟前
《JavaScript this 指向深度剖析:从基础到复杂场景实战》
前端·javascript
岩柏8 分钟前
在vue项目中添加stylelint
前端
暖苏9 分钟前
Vue.js第一节
前端·javascript·css·vue.js·ecmascript
前端服务区14 分钟前
NodeJS文件流
前端
菜鸡且互啄6915 分钟前
前端打断点
前端
jason_yang24 分钟前
watchEffect的flush属性你都用过不?
前端·vue.js
云深不知处_25 分钟前
RE0_OC_1
前端·ios
uio28 分钟前
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
前端·vue.js
小浪努力学前端1 小时前
React + ECharts:给tooltip里的按钮绑定事件,我踩过的那些坑
前端·react.js·echarts