当前位置: 首页 > news >正文

营销型网站制作费用wordpress 纯静态

营销型网站制作费用,wordpress 纯静态,网站设网页设计,wordpress文章站Unity3D 平台宏定义的介绍和使用。 平台宏定义 在 Unity 开发过程中,经常需要写一些平台相关、调试用、或只在编辑器运行的代码。 为了避免打包错误或平台兼容问题,我们可以使用 Unity 提供的 宏指令(平台宏定义) 来控制代码的编译…

Unity3D 平台宏定义的介绍和使用。

平台宏定义

在 Unity 开发过程中,经常需要写一些平台相关、调试用、或只在编辑器运行的代码。

为了避免打包错误或平台兼容问题,我们可以使用 Unity 提供的 宏指令(平台宏定义) 来控制代码的编译范围。

一个最常见的示例如下:

#if UNITY_EDITORDebug.Log("仅在编辑器中输出");
#endif

这段代码只会在 Unity 编辑器中编译执行,打包时会被自动忽略。

常见 Unity 平台宏定义一览

宏定义说明
UNITY_EDITORUnity 编辑器中生效
UNITY_ANDROID安卓平台
UNITY_IOSiOS 平台
UNITY_STANDALONE_WINWindows 平台(PC 端)
UNITY_STANDALONE_OSXmacOS 平台
UNITY_STANDALONE所有桌面平台(Windows、Mac、Linux)通用
UNITY_WEBGLWebGL 平台
UNITY_SERVERServer 构建模式(无图形)
DEVELOPMENT_BUILD开发者模式构建
UNITY_EDITOR_WINWindows 编辑器环境
UNITY_EDITOR_OSXmacOS 编辑器环境

💡 Unity 会根据打包平台自动启用这些宏,无需手动添加,直接在代码中使用即可。

实际使用示例

编辑器专用代码

如菜单功能、调试工具等。

#if UNITY_EDITOR
using UnityEditor;
#endifpublic class EditorOnlyTool
{public void StopPlaymode(){
#if UNITY_EDITOREditorApplication.isPlaying = false;
#endif}
}

路径适配

适用于不同平台存档路径处理。

string GetSavePath()
{
#if UNITY_EDITORreturn Application.dataPath + "/";
#elsereturn Application.persistentDataPath + "/";
#endif
}

自定义宏定义

除了系统默认的宏,我们也可以在项目中自定义宏。

设置位置:Edit > Project Settings > Player > Other Settings > Scripting Define Symbols

💡 自定义宏非常适合用于功能开关、调试模式、模块切换等场景。

小游戏平台

例如添加:

WX_GAME;DY_GAME;

然后代码中使用:

#if WX_GAME// 微信小游戏逻辑
#elif DY_GAME// 抖音小游戏逻辑
#else// 其他平台逻辑
#endif

在打包微信小游戏时,移除 DY_GAME 宏定义,只会编译微信小游戏的逻辑。同理,打包抖音小游戏时,移除 WX_GAME 宏定义。

可以写一个菜单工具,一键切换平台宏定义,避免手动删来删去。

using System.Linq;
using UnityEditor;
using UnityEngine;public static class PlatformMacroSwitcher
{// 所有小游戏平台的宏,用于互斥private static readonly string[] MiniGameMacros = { "WX_GAME", "DY_GAME" };[MenuItem("Tools/小游戏平台切换/切换到微信小游戏")]public static void SwitchToWXGame(){SetExclusiveMacro("WX_GAME");}[MenuItem("Tools/小游戏平台切换/切换到抖音小游戏")]public static void SwitchToDYGame(){SetExclusiveMacro("DY_GAME");}private static void SetExclusiveMacro(string targetMacro){var targetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup);var symbolList = symbols.Split(';').Where(s => !string.IsNullOrWhiteSpace(s)).ToList();// 移除所有小游戏平台宏symbolList.RemoveAll(s => MiniGameMacros.Contains(s));// 添加目标平台宏if (!symbolList.Contains(targetMacro)){symbolList.Add(targetMacro);}// 更新宏定义string newSymbols = string.Join(";", symbolList);PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, newSymbols);Debug.Log($"已切换到平台宏:{targetMacro}");}
}

日志开关

例如添加:

ENABLE_LOG;

封装一个日志工具类,可以通过宏定义控制是否打印日志。

using UnityEngine;public static class LogUtil
{[System.Diagnostics.Conditional("ENABLE_LOG")]public static void Log(string message){Debug.Log(message);}[System.Diagnostics.Conditional("ENABLE_LOG")]public static void LogWarning(string message){Debug.LogWarning(message);}[System.Diagnostics.Conditional("ENABLE_LOG")]public static void LogError(string message){Debug.LogError(message);}
}

可以写一个菜单工具,一键开关日志宏定义,避免手动删来删去。

using System.Linq;
using UnityEditor;
using UnityEngine;public static class ToggleLogMacro
{[MenuItem("Tools/日志开关/开启 ENABLE_LOG")]public static void EnableLog(){ToggleMacro("ENABLE_LOG", true);}[MenuItem("Tools/日志开关/关闭 ENABLE_LOG")]public static void DisableLog(){ToggleMacro("ENABLE_LOG", false);}private static void ToggleMacro(string macro, bool enable){var targetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;var symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(targetGroup);var symbolList = symbols.Split(';');if (enable && !symbols.Contains(macro)){symbols = string.IsNullOrEmpty(symbols) ? macro : symbols + ";" + macro;Debug.Log($"启用宏定义: {macro}");}else if (!enable && symbols.Contains(macro)){symbols = string.Join(";", symbolList.Where(s => s != macro));Debug.Log($"关闭宏定义: {macro}");}PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, symbols);}
}

使用技巧与注意事项

建议使用的场景

  • 平台适配:Android/iOS 的不同 API、路径、权限处理
  • 调试工具:只在开发时使用的代码
  • 构建优化:排除测试代码、防止泄露敏感信息

不建议滥用宏指令

  • ❌ 大段平台逻辑堆叠在一个文件中,可读性差
  • ❌ 宏代替运行时判断,导致运行逻辑不一致
  • ❌ 自定义宏未文档化,易被遗忘或误用

结语

Unity 的宏指令是跨平台开发的重要工具,它让我们可以为不同平台编写不同的逻辑代码,也能帮助我们控制调试和发布行为。

但使用时要保持 清晰结构文档记录 ,避免维护困难。

http://www.dtcms.com/a/517026.html

相关文章:

  • 探索Objective-C中的对象复制:深入理解copy和mutableCopy
  • Wordpress自建外贸网站网站运营怎么学
  • 最大回撤约束下ETF多因子动态止盈参数校准方案
  • 广东省省考备考(第一百三十天10.22)——科学推理:受力分析(第三节课)
  • Transformer 面试题及详细答案120道(111-120)-- 综合与拓展
  • win网站建设学习网站建设课程
  • 【Android】详细讲解ViewDragHelper的实现原理(不含代码版)
  • 有关学校网站建设策划书个人简历电子版填写免费模板
  • CAS #:1309649-57-7,Biotin-PEG4-azide,生物素-PEG4-叠氮
  • 什么是搜索引擎百度sem优化师
  • 防重复提交的Token机制需求测试点
  • 李宏毅机器学习笔记29
  • 羊驼免疫平台:纳米抗体制备的天然基石与实践挑战深度解析
  • 【YOLO11-obb部署至RK3588】模型训练→转换RKNN→开发板部署
  • 怎么建立公司网站平台南通微信网站开发
  • nodejs可以做企业网站吗wordpress xcache
  • AI Agent结合机器学习与深度学习在全球气候变化驱动因素预测中的应用
  • 基于 GEE 使用 OTSU 算法赋能遥感水体自动化提取:从自动阈值计算到高效分割的水体自动分割方案
  • 网站开发的项目总结汕头网站建设方案开发
  • 网站做好了怎么做后台wordpress设置弹窗
  • jsp租房网站开发门户网站系统建设项目招标书
  • PL2303TA不支援WINDOWS 11及后续版本,请洽询购买厂商[已解决]
  • Flink 的 checkpoint 对 key state 是怎么样存储的?
  • 辛集市住房和城乡建设厅网站焦作网站建设设计公司
  • 电子商务网站建设有什么意义重庆网站建设途锦科技
  • 【回眸】英语自我介绍(头马俱乐部版)
  • Python技巧:负数的16进制补码
  • 昆山建设局网站首页网站培训公司
  • 南充做网站建网站 网站内容怎么做
  • 力扣热题100道之189轮转数组