unity3d中的坑和解决方案
? ? ?unity3d是一个很牛x的引擎,当然其也有一些东西是不太好或者说不习惯的,下面列举一些:
1、制作特效时,使用animation记录的位置是相对位置,如果直接放到别的节点下会出问题;
? ? 解决方法:在特效根节点的上一层加上一个transform是(0,0,0) (0,0,0)(1,1,1)的父节点,之后再使用和处理父节点
2、使用NGUI制作界面时,ui特效会有位置对不上的问题(美术不会用ngui,使用原始的模型+材质贴图的形式来做特效)
? ? 解决方法:让美术将特效直接做到ui上面
3、美术制作的特效导出时丢失材质和贴图
解决方案:要求美术在建模时不准挂材质,所有的材质不使用自动生成的,而是在unity里面新建、挂接,程序也可以提供删掉默认材质的编辑器扩展插件 (assetImporter as ModelImporter).importMaterials = false;
4、多人间合作时的文件共享和版本控制
解决方案:1》Edit->Project Settings->Editor 打开 meta files 2》meta文件和原始文件一起同步 3》checkout时 按住 左边的alt键或option键
5、文本化场景文件
解决方案:edit----project setting ----editr 将Asset Serialization 的 mode 设置成Force Text
6、ngui的界面元素无法响应
解决方案:制作ui时注意设置摄像机的eventReceiverMask的层为对应的层
7、摄像机看不到ui
解决方案:将ui的层设置为摄像机对应的渲染的层
8、脚本中start和update等函数不能继承
解决方案:将这几个函数内的逻辑抽象成函数,之后子类中继承这些函数
9、脚本调用时因为空引用而崩溃
解决方案:所有初始化工作写在start中,所有功能写到update中,如果仅执行一次,可以加个bool型的开关 10、等待某个特效播完
解决方案:可以使用coroutine来等待
11、跨平台动态加载贴图、音频
解决方案:使用www
12、周期性的活动,如每4拍换一个舞步
解决方案:当前时间/周期 减去整数部分,与0.5比较
13、换装重新组织SkinnedMeshRenderer的sharedMesh时骨骼对不上
解决方案:所有avatar的部件的骨架设置要一模一样
14、减少动作文件的大小
解决方案:游戏开始时动态的将animation加到mesh上面
15、全局功能需要多处调用
解决方案:将全局功能直接挂到程序节点ProgramRoot上,使用时直接 GameObject.Find("ProgramRoot").GetComponentInChildren
16、GameObject.Find找不到隐藏的节点
解决方案:定义public GameObject 属性,之后在编辑器里面拖拽
17、各个界面间数据的共享
解决方案:创建单独的GameWorld等数据模型模块,并统一实现序列化和反序列化
18、分时的状态逻辑 解决方案:coroutine加配置表
19、灵活的object的属性
解决方案:Dictionary<string, string> propsTable;
20、灵活的事件响应回调
解决方案:统一继承BaseCallBack,里面写具体的逻辑
21、渲染暂停时实现动态效果
解决方案:Time.timeScale = 0f; 程序通过 Time.realtimeSinceStartup来手动实现特效效果
22、炫酷的显示得分
解决方案:每一位数字用一张数字的贴图来实现
23、ui特效阻碍ui的响应
解决方案:调整z值,使特效在ui的后面
24、特殊的运动轨迹和手感 解决方案:用animation编辑器做成动画来播放