unity3d 遇到的坑都有哪些坑

unity3d中的坑和解决方案 -
- ITeye技术网站
博客分类:
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 =
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& propsT
20、灵活的事件响应回调
解决方案:统一继承BaseCallBack,里面写具体的逻辑
21、渲染暂停时实现动态效果
解决方案:Time.timeScale = 0f; 程序通过 Time.realtimeSinceStartup来手动实现特效效果
22、炫酷的显示得分
解决方案:每一位数字用一张数字的贴图来实现
23、ui特效阻碍ui的响应
解决方案:调整z值,使特效在ui的后面
24、特殊的运动轨迹和手感 解决方案:用animation编辑器做成动画来播放
浏览 13901
eric_weitm
浏览: 93901 次
来自: 北京
你对hiphop的深入程度到了什么程度了?想和你进行探讨一下
lj3362569 写道可以再讲具体点么?还有现有的hipho ...
可以再讲具体点么?还有现有的hiphop不支持哪些功能?(window.slotbydup=window.slotbydup || []).push({
id: '2014386',
container: s,
size: '234,60',
display: 'inlay-fix'
&&|&&0次下载&&|&&总3页&&|
您的计算机尚未安装Flash,点击安装&
阅读已结束,如需下载到电脑,请使用积分()
下载:2积分
0人评价2页
0人评价5页
0人评价22页
0人评价11页
0人评价1页
所需积分:(友情提示:大部分文档均可免费预览!下载之前请务必先预览阅读,以免误下载造成积分浪费!)
(多个标签用逗号分隔)
文不对题,内容与标题介绍不符
广告内容或内容过于简单
文档乱码或无法正常显示
若此文档涉嫌侵害了您的权利,请参照说明。
评价文档:
下载:2积分游戏引擎 Unity 的入门易精通难体现在哪?为什么?
【王楠的回答(37票)】:
为什么入门简单,看一下官网的文档和视频教程就知道了,看完几段视频和例子就能让初学者做出能玩的东西,其他同类商业引擎都做不到。物体+组件的结构,所见即所得的编辑方式,都把初学者的门槛降到了最低。
再说说难精通的体现。其实任何可以拿来做高大上酷炫屌游戏的商业引擎都是难精通的,这个由引擎的功能深度和泛用性决定。一个集成了无数商业中间件的引擎,包括动画系统、GUI、光照系统、寻路、物理等各个部分,任何一部分单独拿出来都需要用户用心掌握。从这个角度来说Unity和Unreal基本是差不多的。
那么Unity特有的坑有哪些呢?
1. 脚本执行顺序:MonoBehavior是Unity组件系统的核心,离开这个类所有易上手和高效开发的特性都无法施展。但多个组件脚本的执行顺序控制始终是令人头痛的问题。不了解这一点的用户很容易陷入各种隐藏bug的泥沼。
2. 组件式功能结构给每个人更大的控制权力,但无法很好的区分团队不同成员的责任。相比Unreal把编程分为C++,UnrealScript和Kismet三层的做法,Unity让每个开发者都能看到脚本源码并在需要时进行修改。对于独狼开发者来说非常方便,但如果一个游戏逻辑同时可能受到脚本程序、prefab参数配置和场景引用关联三方制约,维护起来就非常的乱,出了问题也很难第一时间分清责任。
3. 内存分配和垃圾回收造成的效率问题初学者很难了解。Unity的一个重要特征就是为了让整个引擎有更广的受众,故意隐藏了很多复杂的使用方法。比如说全自动的垃圾回收,就是为了让不懂内存分配的用户也能无障碍使用。但很快进阶一点的用户就会发现大量运行时垃圾回收造成的拖慢,以至于成为一个入门必经的陷阱。如果能在官方文档里告诉用户哪些操作会分配内存,情况会改善许多。
4. 功能迭代推新迅速,造成大量不成熟不完善的工作流程。这一点很难说是缺点,毕竟能第一时间用到酷炫的新功能对很多用户来说是求之不得的,当然如果你是商业项目的技术负责人就要小心了。一般来说,官方推出的功能至少要在一年后稳定性和适用性才会超过Asset Store上的同类第三方插件。
总的说来,由于优秀的可扩展性,上述这些问题都不致命。总有人在制作优秀的工具来弥补这个引擎的各种不足。而配合其天下无敌的易用性,unity整体的技术方向是非常成功的。
【邓凯的回答(13票)】:
Unity入门易:
1、渲染对象上挂一个脚本组件就可以驱动该对象的逻辑,基于MonoBehaviour的脚本一上来就把初始化(Awake、Start),更新(Update、FixedUpdate)的接口留好了,初学者完全不用考虑程序框架一类的问题,直接填空就行。很像做早期flash游戏的感觉。
2、编辑器非常强大,所见即所得的编辑方式,可以随时暂停、单帧执行游戏逻辑,提供场景和游戏多个窗口实时调试,观察效果。脚本组件面板上可以实时看到所有变量的当前值,这对于调试游戏逻辑非常方便。
3、3D引擎功能很完善,与我们自研了5,6年的3D引擎相比,还是远远甩我们一大截,除了支持前向和后向的多种渲染管线,各种后渲染效果,还内置基于Beast的LightMap烘焙、基于Umbra的遮挡剔除这些商业中间件,要知道单采购这些中间件就得好几十万RMB,因此就算是个3D新手,要做个炫酷的3D效果也不是很难。虽然在渲染效果上可能比不上Unreal,Cry,但是U3D这玩意在中国,就算是免费的了,再说用U3D基本也是要发移动平台,目前的3D效果已经很够用。
4、游戏其他方面的组件也很丰富,有基于PhyX的物理系统,你要做点什么疯狂小鸟、割绳子之类的游戏,真是很容易。另外还有基于NavMesh的导航系统、音乐音效系统(做音效的是FMOD的前开发者)等。
5、良好的开发者社区生态系统。Unity最NB的就是建了个Asset Store,全世界的UNITY开发者在这里卖自己做的各种代码、组件、美术资源,分享经验。因此,学习成本大大降低。
6、一键发布到各种平台,包括IOS、Andriod、WP、网页、Windows、Mac等,如果不是要接入其他平台相关的库(如内购等),几乎完全不用学习平台相关的编程知识(Object-C, Java等)
7、作为证明Unity入门易的一个例子,本人在刚开始学Unity时,用了一个半月的业余时间,做了个推币小游戏,放在AppStore上,一个月基本上能收个几千块钱。给个链接吧,不算广告啊,只是说明下1个半月业余时间用Unity能做个什么样的出来:
--------------------------------------------------------------------------------------------------------------------------------
Unity精通难:
1、基于MonoBehaviour的脚本,用得太顺手会有有很大的架构风险,你会情不自禁的A组件引用B组件,B组件又引用A组件.....项目一大写成一团乱麻。当然用其他引擎,其他语言也有这问题,但UNITY的一些特性必须用MonoBehaviour类来使用,所以要设计一个健壮的MVC架构需要顶住很多诱惑,绕一些弯。
2、基于MonoBehaviour的脚本,组件的初始化顺序无法明确,这个坑也有回答提到了。
3、底层代码不开源,尤其是Asset Store上卖的东西那帮开发者也习惯弄个dll封装起来,因此,一些底层修改需求没法改,有时候很头疼。
4、C#的GC问题,这个不能说是Unity的错,C/C++的开发者会在长期的工作中变得对内存敏感,而C#开发者会弱得多,但游戏恰巧又是个内存敏感的应用程序。因此,开发者需要对C#的内存分配时刻非常敏感,否则就会出现频繁GC导致的顿卡现象。这里尤其要注意在每帧更新时的小内存分配。这方面要善用UNITY自带的内存和性能分析工具。
5、毕竟是个3D引擎,3D图形学知识毕竟门槛很高,要深入的做一个项目,需要对3D知识了解得很深,因此,在开发一些大型项目时,新手往往对于3D的各种需求和问题,如果Unity官方没有,或者Asset Store里找不到,就感到棘手。
6、最大的坑!IOS发布时遇到跟AOT编译有关的运行时异常。简单说就是Unity采用mono对C#进行跨平台编译,但在iOS平台中,Mono是以Full AOT模式运行的,无法使用JIT引擎,于是引发了这个异常。所以经常出现的情况是在PC和Andriod上游戏都跑得很好,但在iOS平台会在运行时当掉!具体限制请参照:
7、作为证明Unity精通难的例子,我司跨时代炫酷国际大作秒杀Appstore前20的Unity项目,做了大概8个月了吧,估计要出来还得小1年....
【知乎用户的回答(2票)】:
入门易是因为它的编程脚本话(非常对象化),这个是核心。然后在这个核心之外,价格因素吸引了很多的开发者和公司。加上它的插件化技术形成了很好的生态环境,因此学习资料比其他引擎多了不止很多两个字就能说的清。这些都形成了入门的门槛很低。
精通难是因为3D本身,而不是unity这个工具。
&&&&&本文固定链接:
【上一篇】
【下一篇】
您可能还会对这些文章感兴趣!
最新日志热评日志随机日志}

我要回帖

更多关于 unity3d游戏有哪些 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信