Unity平台宏定义失效问题

平台宏定义

一般情况下的宏定义

Unity的平台宏定义,大家都知道,百度上也有好几篇相关的文章。官网上的介绍,是最清晰全面的,这里上个链接不做赘述。
Unity管网的平台宏定义
这篇文章主要关注在官网上的自定义宏定义。管网中也有相关的介绍,只是在项目出现相关问题时才注意到,这里做一些记录分享。

原因

我之所以关注这个问题,是在开发项目时,发现Unity本身的平台宏定义,不知道是什么原因,失效了。

#if UNITY_IPHONE
        		_StrPathURL = Application.dataPath + "/Raw/";
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
        		_StrPathURL = Application.streamingAssetsPath + "/";
#elif UNITY_ANDROID
                _StrPathURL = Application.persistentDataPath + "/";
#else
        		_StrPathURL=string.Empty;
#endif

这是我之前项目中关于不同平台文件路径的区分。
当我使用其打包安卓时,文件却总是读不出来。我一开始是文件路径的问题,尝试了很多方法,消耗了很多时间在这上面,却总是出不来。然后是怀疑文件读取方法的问题,什么IO类、WWW类都试过了,搭配各种路径表达方式,这个地方真的是把我堵了一整天的时间,反复地试。当时真的没往平台宏定义的地方去想。

#if UNITY_STANDALONE_WIN || UNITY_EDITOR
        		_StrPathURL = Application.streamingAssetsPath + "/";
#elif UNITY_ANDROID
                _StrPathURL = Application.persistentDataPath + "/";
#else
        		_StrPathURL=string.Empty;
#endif

最后我才把注意力关注到宏定义上,怀疑是不是宏定义出了问题。由于是安卓平台要打包出来测,所以我就用了个笨办法测试,在游戏屏幕上建了个UI将路径直接赋值到这个UI上,显示出来。结果发现路径根本不是安卓平台的路径,为了确定我的猜想就在平台判断上做了个最简单的赋值。UNITY_EDITOR下赋值1;UNITY_ANDROID下赋值2。最后UI显示的是1。我这才发现平台宏定义根本没有起作用。
不起作用的原因,我也不清楚╮(╯▽╰)╭。这也不是这篇文章的重点。

自定义宏定义

我解决问题的方法,就是自定义宏定义
在Player Settings中设置:File---->Build Settings---->Player Settings---->Other Settings---->Scripting Define Symbols



在PC平台下,添加宏定义WINDOWS(使用单词可根据自己喜好定义),要与其他宏定义用“”分隔开。

在安卓平台下,添加宏定义ANDROID。若是IOS平台同理。
此时我们在不同的平台就有了不同的宏定义,可以此来进行平台区分。

#if WINDOWS || UNITY_EDITOR
        _StrPathURL = Application.streamingAssetsPath + "/";
#elif ANDROID
        //_StrPathURL = Application.persistentDataPath + "/";
        _StrPathURL = "jar:file://" + Application.dataPath + "!/assets/";
#else
        _StrPathURL = string.Empty;
#endif

这时项目中的路径便可正常运行。

发布了20 篇原创文章 · 获赞 1 · 访问量 942

猜你喜欢

转载自blog.csdn.net/f_957995490/article/details/103612873
今日推荐