Unity中,对于异步加载场景的方式,脚本文档中有一定的解释和示例代码:http://docs.unity3d.com/ScriptReference/Application.LoadLevelAsync.html
其默认情况下,会在异步加载完成后立即切换到目标场景,但有些时候,需要在切换完成时先做一些操作,比如更新UI显示,释放资源等,也就是延迟切换场景的时间,这时就需要用到LoadLevelAsync返回值AsyncOperation的allowSceneActivation属性,将其置为false后,就不会立即切换场景了,但是有一个小问题就是,引擎底层对于这个逻辑的处理会变为,场景加载完成后,AsyncOperation的isDone以及progress都不会是正常的完成标记,也就是true和1.0,而是false和0.9,所以在需要手动置allowSceneActivation为true切换场景的位置的加载完成逻辑判断方式也需要调整为progress的0.9了。
unity3d
Unity3D使用MonoDevelop进行开发时的项目编译问题
自从VS2015出现以后,Unity3D的新版本也直接内置了对其支持,写代码和调试都非常方便,但是在没有VS2015的开发环境下,比如没装或者是装不了(Mac OSX)下,用Unity自带的MonoDevelop也还算方便。
这次记录的是一个之前太注意的小问题,C#脚本中写了个带默认参数的函数,结果发现Unity编辑器可以编译运行,但在MonoDevelop调试时却提示编译错误,检查了下,发现原来是默认用MonoDevelop调试时,这个IDE也会对打开的项目进行编译,但其编译的方式和Unity本身不太一样,对这些后加入支持的代码写法并不支持,解决方法也很简单:Tools->Options->Unity->Debugger->Build project in MonoDevelop,这个选项勾掉就可以了。
关于Unity3D内置Blinn Phong光照模型计算在移动设备上的曝光问题
Unity3D的surface shader用起来很是方便,比直接的cg写起来省事的多,而且有很多现成的东西可以include,比如光照部分就是,常用的lambert, blinn phong都提供了现成的实现,但是最近在做specular时发现,内置(https://unity3d.com/unity/download/archive下载全部内置shader source或 Windows, Mac)的LightingBlinnPhong在移动设备上使用时会出现高光曝掉的问题!
简单看lighting.cginc中的相关函数:
Unity3D项目使用SVN进行版本控制时的注意事项
Unity3D自有一个叫Asset Server的东西可以用来实现项目版本控制,但是,由于习惯,我更倾向于用纯代码项目常用的工具,比如SVN来进行版本控制,就算Unity3D没有像VS Eclipse等IDE那样对SVN提供整合支持,配合TortoiseSVN也一样可以方便的做到SVN项目版本控制。
一开始,我直接讲整个Unity3D的项目文件夹都Import进了svn,后来发现,稍有改动就会有很多类似缓存性质的文件发生变化,需要commit上传,这时才想到是不是并不需要上传所有文件,于是在Unity官方文档中发现了这篇:http://docs.unity3d.com/Documentation/Manual/ExternalVersionControlSystemSupport.html,写的不少,但关键就是以下这几点:
1.这是Pro Only的feature,应该是指生成asset的meta。
2.在Edit->Project Settings->Editor的 Version Control里面选择Meta files。
3.完全关闭unity编辑器,并在服务器端(如果曾经误传的话)和客户端都删除Library文件夹,这是一个本地的缓存目录,不需要版本控制。为了方便保险,最好直接Ignore掉!
4.按住左Alt或mac的option重新在编辑器中打开项目。
5.Commit到此为止的所有改动。