Unity开发中注意



由于Unity的部分机制具有特殊性,在此列出需要注意的要点。

1.1.  内置方法

Unity提供的固定方法,如StartUpdateOnMouseEnter等,除非有特殊的需要,否则请使用protected访问修饰符以保证良好的封装性。必要时可以使用virtual关键字供子类重写。

1.2.  可选参数

public void MethodWithOptionalParameter(int a = 1)

{

}

继承MonoBehaviour类,不可以声明带可选参数的方法,否则会导致脚本无法附加到游戏对象上。如果为一个已经附加到游戏对象上的脚本增加可选参数方法,同样会导致报无法加载脚本的警告(Can’t add script)。由于报错信息和错误原因不一致,是Unity一个相当莫名的BUG,必须要注意。

1.3.  AOT

有些操作系统不支持动态编译,比如大部分的嵌入式系统以及苹果的IOS。这意味着所有的托管代码都必须使用Full AOT在打包前全部编译成本机代码,因此使用某些泛型机制时会导致抛出如下异常:

ExecutionEngineException: Attempting to JIT compile method….while running with --aot-only.

为考虑到良好的跨平台性,请避免:

  1. 使用带泛型的虚方法;

  2. 在泛型类中使用P/Invoke

  3. 使用System.Reflection.Emit(其他反射机制可用);

参考文档:

http://docs.xamarin.com/guides/ios/advanced_topics/limitations

http://www.mono-project.com/AOT


Unity中使用C#定时器会报错

CompareBaseObjectsInternal can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.


untiy异常报错,可查询C:\Documents and Settings\用户名\Local Settings\Application Data\Unity\Editor


Unity中的Path对应各平台中的Path :



IOS:
Application.dataPath :                      Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data
Application.streamingAssetsPath :   Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw
Application.persistentDataPath :      Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents
Application.temporaryCachePath :   Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches



//**********

CompanyName: DefaultCompanyjqd


ProductName:TestUnityPath


Bundle identifier: com.Company.ProductNamejqd


Android:
Application.dataPath :                         /data/app/xxx.xxx.xxx.apk

/data/app/com.Company.ProductNamejqd-1.apk
Application.streamingAssetsPath :      jar:file:///data/app/xxx.xxx.xxx.apk/!/assets

jar:file:///data/app/com.Company.ProductNamejqd-1.apk!/assets
Application.persistentDataPath :         /data/data/xxx.xxx.xxx/files

/data/data/com.Company.ProductNamejqd/files
Application.temporaryCachePath :      /data/data/xxx.xxx.xxx/cache

/data/data/com.Company.ProductNamejqd/cache


Windows:
Application.dataPath :                         /Assets

自己工程/Assets
Application.streamingAssetsPath :      /Assets/StreamingAssets

自己工程/Assets/StreamingAssets
Application.persistentDataPath :         C:/Users/xxxx/AppData/LocalLow/CompanyName/ProductName

C:/Users/XXXX/AppData/LocalLow/DefaultCompany/TestUnityPath
Application.temporaryCachePath :      C:/Users/xxxx/AppData/Local/Temp/CompanyName/ProductName

C:/Users/xxxx/AppData/Local/Temp/DefaultCompany/TestUnityPath

//**********

//****


CompanyName: DefaultCompanyjqd


ProductName:四个中文字


Bundle identifier: com.xxxxxxx.xxxx.xxxx

windows:

assetSteamFilePath: 自己工程文件夹路径/Assets/StreamingAssets

persistentDataPath: C:/Users/电脑用户名/AppData/LocalLow/DefaultCompanyjqd/____________

dataPath: 自己工程文件夹路径/Assets

temporaryCachePath: C:/Users/xxxx/AppData/Local/Temp/DefaultCompanyjqd/____________

android:

assetSteamFilePath: jar:file:///data/app/com.xxxxxxx.xxxx.xxxx-1.apk!/assets(都加了 -1)

persistentDataPath: /storage/emulated/0/Android/data/com.xxxxxxx.xxxx.xxxx/files

dataPath: /data/app/com.xxxxxxx.xxxx.xxxx-1.apk

temporaryCachePath: /storage/emulated/0/Android/data/com.xxxxxxx.xxxx.xxxx/cache


华为 H30-U10 persistent 存储在了 .../Android/bundle indentifier的名字下的文件夹了

//



Mac:
Application.dataPath :                         /Assets
Application.streamingAssetsPath :      /Assets/StreamingAssets
Application.persistentDataPath :         /Users/xxxx/Library/Caches/CompanyName/Product Name
Application.temporaryCachePath :     /var/folders/57/6b4_9w8113x2fsmzx_yhrhvh0000gn/T/CompanyName/Product Name



Windows Web Player:

Application.dataPath :             file:///D:/MyGame/WebPlayer (即导包后保存的文件夹,html文件所在文件夹)
Application.streamingAssetsPath :
Application.persistentDataPath :
Application.temporaryCachePath :








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

警醒与鞭策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值