当前位置: 代码迷 >> 移动开发 >> unity3d中的坑和好决方案
  详细解决方案

unity3d中的坑和好决方案

热度:4310   发布时间:2013-02-26 00:00:00.0
unity3d中的坑和解决方案

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编辑器做成动画来播放