【Unity笔记03】#if的用法和命名空间
#if基础用法:代码的"开关术"
#if UNITY_EDITORDebug.Log("这段代码只在编辑器里运行");
#elseDebug.Log("这段代码在游戏运行时出现");
#endif
#if UNITY_IOS// 苹果设备的专属优化
#elif UNITY_ANDROID// 安卓设备的特殊处理
#elif UNITY_STANDALONE_WIN// PC版的额外功能
#endif
命名空间基础概念
命名空间是C#中组织代码的一种方式,主要解决两个问题:
避免命名冲突:不同开发者或库可能使用相同类名
逻辑分组:把相关功能的代码组织在一起
何时使用命名空间?(5个典型场景)
1. 大型项目模块化
场景:开发中型以上游戏,有多个功能系统
namespace MyGame.UI {public class HealthBar { /* UI血条代码 */ }
}namespace MyGame.Combat {public class DamageCalculator { /* 伤害计算代码 */ }
}namespace MyGame.Inventory {public class ItemManager { /* 物品管理代码 */ }
}
2. 使用第三方插件时避免冲突
场景:项目中同时使用了AStar寻路插件和DOTween动画插件,它们都有"Path"类
// 不使用命名空间会导致冲突
// 使用命名空间后:
AStar.Path path1 = new AStar.Path(); // 寻路路径
DG.Tweening.Path path2 = new DG.Tweening.Path(); // 动画路径
3. 团队协作开发
场景:3个程序员分别负责角色系统、场景系统和任务系统
namespace TeamA.Character {public class Player { /* 角色代码 */ }
}namespace TeamB.Environment {public class WeatherSystem { /* 天气系统 */ }
}namespace TeamC.Quest {public class Mission { /* 任务系统 */ }
}
4. 区分测试代码和正式代码
场景:开发时需要专门的测试类
namespace MyGame.Core {public class GameManager { /* 正式游戏逻辑 */ }
}namespace MyGame.Test {public class MockGameManager { /* 测试用模拟类 */ }
}
5. 制作可复用的代码库
场景:开发自己的通用工具集供多个项目使用
namespace MyToolkit.Audio {public class AudioManager { /* 音频管理工具 */ }
}namespace MyToolkit.Extensions {public static class UnityExtensions { /* Unity扩展方法 */ }
}