为什么在U3D中无法创建家庭组地型

【教程】Unity3d中NGUI自适应手机屏幕-NGUI-论坛-U3D在线
Unity3D在线
当前位置: ->
-> 【教程】Unity3d中NGUI自适应手机屏幕
NGUI 论坛 > 【教程】Unity3d中NGUI自适应手机屏幕围观:782 | 回复:1
新手入门积分:412帖子:38
&&&&我们平时使用NGUI做游戏界面的时候,由于各种型号的手机分辨率不统一,导致我们用正常方法做出来的界面无法满足所有机型的需求,所以今天就教大家如何实现NGUI中的屏幕自适应。我们首先要创建图层,操作如下:接下来设置NGUI UITool界面的参数,layer选择default,Camera选择Simple 2d。参数设置如下:单击Create Your UI按钮,创建NGUI结构树,效果如下:接下来我们打开NGUI小部件的创建窗口,操作如下:把Template参数设置成Sprite,再选择一个Sprite选项,Pivot设置成再把的为修改摄像机的大小为该背景图片的宽度像素值:如给添加修改中添加代码如下:最后一步修改背景图片的大小,将值修改成和值一样重置一下Sprite对象的的这样就实现了NGUI界面元素在不同手机屏幕的自适应效果了。
北京-饭饭积分:176帖子:4
免责声明:本站所有内容来源于互联网,如果本站部分内容侵犯您的权益,请您告知,站长会立即处理
Copyright Unity3D在线 All Rights Reserved.Theme by U3dOL |SiteMap |网站地图 |百度统计| 联系我们今天看啥 热点:
刨根问底U3D---从Profile中窥探Unity的内存管理,u3d---unity这篇文章包含哪些内容
这篇文章从Unity的Profile组件入手,来探讨一下Unity在开发环境和正式环境中的内存使用发面的一些区别,
并且给出了最好控制内存的方法(我想你已经知道了...Prefab ) ,以及原因。
提前需要阅读的文章
在阅读本文之前或之后我建议阅读一下以下几篇文章
Unity3D研究院之Assetbundle的实战&/archives/2405/
Unity3D研究院之Assetbundle的原理&/archives/2373
Unity 3D中的内存管理&/2012/11/memory-in-unity3d/
星尘(不太确定是否是原作者 哈)的
Unity3D占用内存太大的解决方法&//archive//2961663.html
从NGUI的AltasPacker说起
事情的起因还是因为我在学习使用NGUI(刚接触Unity没几天&), 教程看了看都没问题 自己动手操作的时候突然发现...
NGUI 创建UI时候必须都先要创建Altas,那我创建好后的散图是放在工程里面呢 还是要删掉? 不删会影响性能么?&
Google了一番并没有发现满意答案,所以只好自己Profile一下,于是有了如下实验:
1& 首先建立一个空场景,运行,打开Profile. Texture(纹理)部分使用内存2.5MB
2&加入一张图片,场景上不做任何引用。 该图片显存展开后大小为1.5MB , 运行 然后再打开Profile
3& 奇迹的事情发生了... 纹理占用的内存大小直接变为 5.8MB&
5.8MB- 2.5MB = 3.3MB 很奇怪的一个数,于是我同时怀疑三件事
1& 即使素材完全用不到但是如果工程中有导入则最后会被打包
2& 即使素材没有被当前场景使用,Unity仍旧会加载 ( Unity启动时候加载所有的素材??! )
3& Unity对素材在内存中有留有一份引用,3.3MB ~= 1.5MBx2 ( ??! )&
如果以上三点有一个是真的(全是错的), 那Unity无疑直接变为废柴....&
于是乎就此三点我开始无限的刨根问底....&
功夫不负有心人吧,终于在一片帖子上面找到了突破口
/questions/57909/find-unused-assets-in-project.html
这篇文章说的很清楚,Unity在发布时候会自动过滤掉未引用的所有资源,并且整个被打包进来的资源可以通过Log查看
根据文章指出的位置找到Log,并且就上面的工程进行测试,打出Android包 &(Mac下Log在 /Users/eran/Library/Logs/Unity/Editor.log , eran为你的用户名)
这样的话 第一个心结就解开了, 看来Unity果真没有这么傻... 以后使用NGUI制作Atlas时候也不用担心是否需要删除小图这件事了.
既然知道了只有在真机设备上才可以进行测试,于是需要再将刚才做的测试重来一次了,只不过这次是在真机上面.
1& 首先建立一个空场景,运行,打开Profile. Texture(纹理)部分使用内存153.0KB
可以注意到,在真机上面运行时候 内存占用明显降低了,并且开销的线很平,不再像编辑环境一样会有波动.
2&加入一张图片并放置在场景上面
虽然没有像想象中的那样为1.5MB,不过 既然小于3MB,则Unity3D肯定不可能留有一份内存的备份(DRAM一份 VRAM一份,DRAM的用于处理LostConext时候重新上传GPU).&
这里面其实还有一个小插曲:
在Android上面 Rendering中显示 使用的显存为0,这点和我理解的3D渲染原理不符呀,一直让我困惑了很久。后来突然想到 难道是因为手机是共享显存的原因?
果不其然 当我把项目发布为PC版本时候&再跑Profile,显存占用就有数字了. 并且显存占用数和我后面说道的动态剔除还有关系,说明显存还发生了swap,这块和所讲的事情无关 就不细说了,如果大神对这块很了解 希望指点我一下.
ok 继续说上面提到一嘴的 动态剔除,这个是我无意发现的,
我把上面那张图加了一个Animation 让其左右移动,当我真机测试时候,当这张图片移出屏幕时候DrawCall会减1,也就是只要屏幕看不到的东西Unity会自动帮你剔除,
减少DrawCall, 其实细想想, 这个是很正常的一个事情,因为Unity是一个完全的3D引擎,这也是为什么在Unity里面没有像素 进来单位是Unit,没有屏幕的宽高,只能调整摄像机的视野.&
相比之下之前用的Starling,Cocos,虽然底层也在使用GPU进行渲染,但是他的整体引擎架构是基于2D的,所以自然无法在底层完成这种自动剔除以及显存交换的行为.相比之下Unity要优越许多.
就此Unity的一大谜题得以解开,根据上面的实验我得到了如下两条结论
结论: 即使项目中有许多未使用的图片,只要未放置在特殊文件夹下(Resource,StreamingAssets)并且没有被Prefab引用,最终导出时候不会被打包,更不会占用显存,但是在开发阶段会.
结论: Unity 会自行对移出场景的对象进行剔除从而减少DrawCall
Prefab 最好的管理内存(显存)的方式
我的刨根问底行为到这里并没有结束, 既然知道了Unity如何加载素材,那他什么时候卸载呢?
我又做了如下实验:
建立两个场景,SceneA,SceneB. 在SceneA中加载一张纹理,同时提供一个跳转到SceneB的按钮.&
点击按钮跳转到SceneB,SceneB是一个空场景 什么都不放.&
预期的是当切换到SceneB时候SceneA中所占用的显存应该会被释放,不过结果却又是让人大失所望... 仍旧没有变化
即使我在SceneB中调用GC都没用(其实看过GC介绍的朋友也应该知道在那里调GC本来就应该没用)
最后又是一通Google,不过这次没有像上次那么走运 没有任何的收获,这也是我后来转向开始研究Prefab的原因. 不过还是继续把这里说完.&
又是一次意外的测试,我发现当我再建立一个SceneC时候, 由SceneA-&SceneB-&SceneC 这个时候 SceneA中的显存会得到释放. 就此问题我还发了一个Question.&
有个朋友给了他项目上的证实,Unity确实如此&/question/36097
既然Unity自动管理的内存需要跨两个场景才能消除,那我们有没有办法自己控制呢? 方法是有的 那就是使用Prefab.
如何创建及如何使用Prefab 松雨的那两篇文章已经说的非常明白了,我就不重复造轮子了.
结论: Unity自身的显存回收是需要经过跨两个场景,如果使用Prefab在调用assetBundle.Unload (true)时候可以释放显存。
以上是我这几天通过实验摸索的一些经验,希望能对你有所帮助。如果哪里说的不对还请大神指出
暂无相关文章
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&
Asp.Net教程最近更新小站会根据您的关注,为您发现更多,
看到喜欢的小站就马上关注吧!
下一站,你会遇见谁的梦想?
Unity3D游戏开发交流平台&&探讨最新前沿技术&&本站教程皆原创欢迎转载请注明出处=)&&页面右边有个向下箭头点击自动翻页-&
简单介绍下itweens的用法
作为一个移动应用开发者须知
代码质量的重要性结构合理、规划清晰、扩展性强的代码不会直接作用在用户的感受当中,但是对产品的可持续发展却起着重要的基础性作用。反之,差劲的代码通常会直接影响产品的体验。用户不关心应用为什么会崩溃,不关心到底是什么原因导致输入内容的丢失,他们会把所有的问题都归结于你的产品和品牌的错误。在技术开发的人力资源方面,即使你刚刚起步,也不要觉得随便找个一般般的开发者并按小时计费是一种划算的方式。在同样的时间内,一名普通码农也 许可以马马虎虎的写出一个功能模块,而一名优秀的程序员则可能产出三个更加健壮的模块。一旦你决定更换那个普通的程序员,那么继任者很有可能花很多时间了 解之前的代码,甚至需要重新来过;而经验丰富的开发人员所写出的代码通常具有更高的可复用性。市场推广如果你们的团队当中已经有市场部门了,那么不坏,不过草根设计师和开发者们同样可以发起相当有效的市场推广活动。相信我,当我刚刚起步的时候, 没人知道我是谁,但现在,我的应用正在得到来自各方面的关注和推荐,包括苹果、Mashable、TechCrunch、The Huffington Post、Fox新闻等等。我没有在所谓的市场活动上花过一分钱,当然,不包括建设相关推广网站所需要的费用。尽早启动多数开发者都认为市场活动应该在应用发布上线之后再开始进行。这种想法并不正确。一个策划周密、准备充分的发布活动是非常关键的,特别是对于那些定价比较低廉的应用来说。如果你的发布活动没能一鼓作气将产品推到排行榜的前列,它就很有可能在短时间内被淹没掉;不在榜里的应用对用户来说几乎是隐形的。应用上线之后,用户在App Store当中留下的评价固然会对产品的口碑起到正面或负面的影响作用,但这并不是决定排名的最主要因素。App Store的排名算法一直在发生着变化,不过总体上来说仍是以一段时间内的下载量作为最主要的参考因素。我们可以将这个&一段时间&理解为截至当天为止的 4天内,所以之前3天的下载量对于排名的影响作用非常关键,而当天所作的推广活动只有在若干天之后才会收到成效。在这种情况下,零星的碎片化的推广并没有 太大意义,最有效的还是能持续一段时间的火力全开的推广活动。正如App Savvy一书的作者Ken Yarmosh所指出,市场推广计划应该从产品初期就开始启动,并伴随着产品设计开发的历程而不断完善,直到发布上线时做出全力而完美的一击。 交些朋友人脉是不可忽视的因素。没有相关的人际关系,你所失去的也许正是在成百上千的竞争对手当中脱颖而出的重要机遇。我在Twitter里创建了一个列表,其中包括苹果的员工、媒体从业者和一些著名的iOS开发者。你也可以为自己建立一些这方面的人脉,包括科 技博客作者、有影响力的设计师与开发者等,都是不错的关注对象。这些人大都很酷很好打交道,他们通常乐于和那些有好想法好产品的人进行交流。& 找到他们Twitter是好去处,业界有影响力的人们基本都在推。在有影响力的博客中发表评论或通过邮件联系作者,进行交流。面对面的沟通是最有力量的。去参加业内的一些大会,多认识些朋友。注意言行,不要成为垃圾广告发布者有机会与这些人进行交流,不代表着他们一定会对你的应用保持长久的兴趣。要建立有意义的人脉关系,当你希望展示一些工作成果的时候,试着以一种征求意见建议的姿态来提出,而不要像做广告一样肆无忌惮。 礼尚往来在与这些人进行沟通交流的过程中,要想想他们有哪些需求,你能为他们提供怎样的帮助。也许你正好可以回答他们在Twitter里提出的问题,或是对他们在博客里表达的观点有所见解。&有所回馈&是很重要的,有意义的人脉关系正是通过有来有去的交流互动而建立起来的。 自己动手试着自己写写博客,分享一下你在制作应用的过程中都学到了哪些东西。人们喜欢读真实的东西,类似iDevBlogADay这样的网站也有可能将你的文章收录并推荐给大家。宣传机器在应用发布上线之前的几周,就可以启动&宣传机器&了,核心目的在于创建第一批用户群,确保他们在应用上线当天立刻进行下载。通过产品预告页面收集目标用户的邮箱,在应用上线时即刻进行通知&为你的应用在Twitter和Facebook上创建帐号:这可以让潜在用户轻松的follow到产品的进展,同时能够在平台当中进行传播。你 可以发布一些产品预览、进度日志等方面的内容,当然也可以直接用这个帐号follow那些有可能对你产品感兴趣的人,吸引关注。建立产品预告页面:打造一个足够吸引人的页面,对应用进行简要介绍,放置一个表单,让那些有兴趣的潜在用户留下邮箱。在应用发布上线的时候及时通知这些目标用户进行下载。创建演示视频:视频的宣传效应是最好的,Clear的产品视频及其引发的讨论就是不错的案例。而且视频是短时间全方位演示产品特色的最佳手段,传播起来也很轻松快捷。内部测试:寻找一些目标用户,让他们成为产品的首批使用者。除了&测试&方面的目的之外,这种方式可以让他们感受到自己的重要性,从而有可能成为产品的第一批忠实用户及推广者。  获得推荐自从获得了苹果设计奖(Apple Design Award),我的应用就被各种科技媒体争相推荐,但所有这些加在一起的推动效果都不如App Store当中的推荐给力。问题是,怎样才能获得App Store的推荐?每周都有成千上万的应用冒出来,而其中只有几个产品能获此殊荣,登上App Store首页。首先,产品要有值得App Store推荐的点,它必须在某些方面引起苹果的兴趣。你的应用在界面设计上是否足够的漂亮雅致?是否能充分展示iOS平台的强大功能?与其他同类应用相 比是否有差异化的亮点?这些都是决定你的应用能否获得推荐的重要因素。&幸运&的是,能真正把这些要点做到位的产品其实不算很多。&第二,你要努力吸引到苹果的注意。通常,你需要在苹果采取行动之前通过自己的努力引发关注。苹果有专门的编辑团队,他们负责寻找那些值得推荐的 应用,你必须让自己的产品出现在那些他们有可能关注的地方。根据我的个人经验,他们会特别留意那些正在爬榜的产品。另外,想想你自己通常会到哪些网站获取 新应用的信息,那同样有可能是苹果的编辑们会保持关注的地方。 媒体的力量媒体报道不仅可以起到巨大的推广作用,而且能够帮助你有效的建立产品的可信度,并进一步吸引更多的潜在用户以及具有较高影响力的传播者。如果你 有能力与媒体进行合作,那么一定要在产品发布上线的一到两周之前就开始行动,以确保相关报道可以在发布当天出现在读者和观众面前。还记得之前建立的人脉关系吗,这时你可以试着联系这些朋友了。给他们展示一些产品的预览,看看他们是否有兴趣了解更多。要让交流方式尽量平和自然,保持简短和个人化。& 建立用户群有庞大用户群的产品是真正有力量的。之前与我们合作开发Languages应用的团队Somico Mobile,最近发布了iTranslate Voice。他们几乎几乎没有借助任何来自媒体或苹果官方的推荐助力,但新产品的战绩却相当不错。为什么?因为他家的iTranslate应用本身就拥有 千万级别的用户基础,他们要做的只是向这些老用户们发一封新产品邮件。当然,用户基础的建立是需要时间的。尽可能将用户引导至产品的Facebook主页或Twitter当中,与他们保持互动,让他们保持关注。另外,也可以考虑发布一款面向大众的免费应用,吸引更多的注意力,然后通过应用内广告的方式将你的主打产品宣传出去。
shader帮助手册(二)
shader帮助手册(一)
北京金山公司25岁员工连续加班办公室猝死!!!!为了30号的新毒霸公测,这位兄弟已经连续加
班一周没碰过床了,困了就睡桌子.....伤不起的IT男!!伤不起 伤不起....
EZGUI&SM2 使用规范文档
双面渲染shader
Unity内置的Shader,都是单面效果,想必导入Mesh的同学都碰到过这样的痛苦,布料飘起的背面部分看起来是空气,汽车透过车窗看到是路面...各种蛋疼。有些文章教导大家 把模型做出厚度来吧,这种做法实在太那个啥了......&其实用改写Shader的方法可以很方便的实现双面材质。Unity里有3种Shader方式:1.Fixed Function Shaders&2.Vertex and Fragment Shaders3. Surface Shaders关于这部分的详细介绍,请参考官方的教程。这三种方式里,都可以通过直接在Shader代码头部添加一个Cull off 语句,实现强制双面渲染。但是直接用Cull off的方式 有个重大的缺陷,这材质从两面看无论贴图、颜色、反光、照明情况,都是一模一样的,这并不符合大多数实际情况的常识。在第1和第2种Shader里,是可以通过在一个渲染子程序里用两个渲染Pass来实现双面不同效果的,这部分网上的资料也很多,写起来也很简单直接。&这里主要讨论的是第三种也是最常用的Surface Shader的双面不同效果的实现。Surface Shader是不能写在Pass里的,所以要实现它的双面不同效果就要用其他变通的办法。&首先去Unity官方网站下载一个内置Shader的代码包,链接如下:/download_unity/builtin_shaders.zip&打开后看见一堆.shader文件,可以用任何文本编辑器打开。可以看见系统内建的Shader基本都是Surface方式。这里随便打开一个Normal-BumpSpec.Shader 这是普通的高光-凹凸贴图材质复制代码1.Shader "Bumped Specular" {2.Properties {3.& &_Color ("Main Color", Color) = (1,1,1,1)4.& &_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)5.& &_Shininess ("Shininess", Range (0.03, 1)) = 0.0781256.& &_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}7.& &_BumpMap ("Normalmap", 2D) = "bump" {}8.}9.SubShader {10.& &Tags { "RenderType"="Opaque" }11.& &LOD 40012.& &13.CGPROGRAM14.#pragma surface surf BlinnPhong15.16.17.sampler2D _MainT18.sampler2D _BumpM19.fixed4 _C20.half _S21.22.struct Input {23.& &float2 uv_MainT24.& &float2 uv_BumpM25.};26.27.void surf (Input IN, inout SurfaceOutput o) {28.& &fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);29.& &o.Albedo = tex.rgb * _Color.30.& &o.Gloss = tex.a;31.& &o.Alpha = tex.a * _Color.a;32.& &o.Specular = _S33.& &o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));34.}35.ENDCG36.}37.FallBack "Specular"38.}&简单解说一下几个关键行:第一行Shader "Bumped Specular" 指定了这个shader出现在Unity系统Shader菜单里的名字,如果要修改系统内建Shader的源代码,最好把这个名字改掉,否则和系统内建Shader重名啦。我是这样写的: Shader "Hog's shaders/BumpSpec_Twoside" ,这个shader会出现在Hog's shaders组里,系统会自动完成这个加载。第二行Properties后面的一组以下划线开头的变量表示了这个渲染器需要设置的参数。对于一个高光-凹凸材质来说,需要材质颜色、反光颜色、反光率、材质贴图和法线贴图,这5个变量就对应这5个东西啦,详细请参考系统手册。在第11行LOD 400 后面加上一行:Cull off,这个材质就会自动双面渲染了 Cull off表示双面都渲染,不写默认是Cull back,不渲染背面。你也可以写上Cull front,不渲染正面。改完这行 ,把第一行改成你希望的名字,把这个shader文件拷贝到工程的assets目录底下,系统就能自动加载啦。效果如图:?&双面是双面了,但是哪有两面是一样亮、一样高光区域的....,全透光的砖墙,这种双面很少会用到吧。&如何做到双面不同效果呢?前面说了Surface shader是不能写两个pass渲染不同面的,但其实surface方式可以写多个渲染过程,根本不需要pass的概念,Surface Shader可以这样写:Call back&渲染正面的代码Call front渲染反面的代码&就可以实现双面不同的控制了。根据这个原理,其实我们只要把系统内建shader的源代码复制一份,就能实现另一面不同效果了。以下供参考:复制代码1.Shader "Hog's shaders/BumpSpec_Twoside" {2.Properties {3.//正面5个参数4.& &_Color ("Main Color", Color) = (1,1,1,1)5.& &_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)6.& &_Shininess ("Shininess", Range (0.03, 1)) = 0.0781257.& &_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}8.& &_BumpMap ("Normalmap", 2D) = "bump" {}9.//反面拷贝 改名 也是5个10.& &_BackColor ("Back Main Color", Color) = (1,1,1,1)11.& &_BackSpecColor ("Back Specular Color", Color) = (0.5, 0.5, 0.5, 1)12.& &_BackShininess ("Back Shininess", Range (0.03, 1)) = 0.07812513.& &_BackMainTex ("Back Base (RGB) Gloss (A)", 2D) = "white" {}14.& &_BackBumpMap ("Back Normalmap", 2D) = "bump" {}15.}16.SubShader {17.Tags { "RenderType"="Opaque" }18.& &LOD 40019.& &Cull back20.//开始渲染正面 & &21.CGPROGRAM22.//表明是surface渲染方式 主渲染程序是surf 光照模型是BLinnPhong23.#pragma surface surf BlinnPhong &24.25.26.sampler2D _MainT27.sampler2D _BumpM28.fixed4 _C29.half _S30.31.struct Input {32.& &float2 uv_MainT33.& &float2 uv_BumpM34.};35.36.void surf (Input IN, inout SurfaceOutput o) {37.& &fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);38.& &o.Albedo = tex.rgb * _Color.39.& &o.Gloss = tex.a;40.& &o.Alpha = tex.a * _Color.a;41.& &o.Specular = _S42.& &o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));}43.ENDCG44.45.46.& &Cull front47.//开始渲染反面 其实和就是拷贝了一份正面渲染的代码 除了变量名要改 & &48.CGPROGRAM49.#pragma surface surf BlinnPhong50.51.sampler2D _BackMainT52.sampler2D _BackBumpM53.fixed4 _BackC54.half _BackS55.56.struct Input {57.& &float2 uv_BackMainT58.& &float2 uv_BackBumpM59.};60.61.void surf (Input IN, inout SurfaceOutput o) {62.& &fixed4 tex = tex2D(_BackMainTex, IN.uv_BackMainTex);63.& &o.Albedo = tex.rgb * _BackColor.64.& &o.Gloss = tex.a;65.& &o.Alpha = tex.a * _BackColor.a;66.& &o.Specular = _BackS67.& &o.Normal = UnpackNormal(tex2D(_BackBumpMap, IN.uv_BackBumpMap));}68.ENDCG69.}70.FallBack "Specular"71.}这是个双面可以分别指定的高光-凹凸材质,注意几个要点:properties部分只能出现一次,所以这是不能直接拷贝的。因为要为双面指定不同的参数,双面的参数变量名肯定不能一样,这个论坛里都是程序猿,没必要多解释了。我简单的把用于正面的5个参数前面都加上了一个Back用于反面。在CG代码内部也要对应的应用相应的参数,反面的渲染代码就用刚才全部加了Back的那5个参数。正面代码段用Cull back 开始 反面的代码用Cull front开始以下是渲染效果:?&一面是砖墙一面是木板。。蛋疼了没这个模式下,双面也完全可以指定不同的材质,基本上你不用学习很多内建Shader和CG语法,通过简单的copy-paste就能组合出无穷的双面材质来了。&再提升一下,其实我们常用的双面效果,除了透明的材质以外,无非是两种:一是反面和正面同样纹理,但是不需要高光、反射,只需要一个相对黯淡的被环境光照亮的材质,比如砖墙木盒衣服什么的二是反面显示为单身或其他纹理,但也不需要高光、反射,只需要被环境光照亮,比如汽车内部 建筑物内部等等。第一种情况,反面可以沿用正面纹理,但是以普通的Diffuse方式着色第二种情况,反面不指定或者单独指定纹理,也以普通的Diffuse方式着色两种情况,反面的渲染都可以借用系统内建Shader的Diffuse渲染代码来实现,方式一的代码:复制代码1.Shader "Hog's shaders/BumpSpec_Twoside1" {2.Properties {3.& &_Color ("Main Color", Color) = (1,1,1,1)4.& &_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)5.& &_Shininess ("Shininess", Range (0.03, 1)) = 0.0781256.& &_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}7.& &_BumpMap ("Normalmap", 2D) = "bump" {}8.& &_BackColor ("Back Main Color", Color) = (1,1,1,1)9.}10.SubShader {11.& &Tags { "RenderType"="Opaque" }12.& &LOD 40013.& &Cull back14.& &15.CGPROGRAM16.#pragma surface surf BlinnPhong17.18.19.sampler2D _MainT20.sampler2D _BumpM21.fixed4 _C22.half _S23.24.struct Input {25.& &float2 uv_MainT26.& &float2 uv_BumpM27.};28.29.void surf (Input IN, inout SurfaceOutput o) {30.& &fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);31.& &o.Albedo = tex.rgb * _Color.32.& &o.Gloss = tex.a;33.& &o.Alpha = tex.a * _Color.a;34.& &o.Specular = _S35.& &o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));}36.ENDCG37.38.& &Cull front39.& &40.CGPROGRAM41.#pragma surface surf Lambert42.43.sampler2D _MainT44.fixed4 _BackC45.46.struct Input {47.& &float2 uv_MainT48.};49.50.void surf (Input IN, inout SurfaceOutput o) {51.& &fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _BackC52.& &o.Albedo = c.53.& &o.Alpha = c.a;54.}55.ENDCG56.}57.FallBack "Specular"58.}反面渲染的运算就直接借用了系统的Diffuse Shader,只不过纹理是沿用正面的纹理,只增加了一个反面的颜色变量用来模拟环境光亮度,与纹理混合实现反面效果。渲染效果如下:?&&方式二代码:复制代码1.Shader "Hog's shaders/BumpSpec_Twoside2" {2.Properties {3.& &_Color ("Main Color", Color) = (1,1,1,1)4.& &_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)5.& &_Shininess ("Shininess", Range (0.03, 1)) = 0.0781256.& &_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}7.& &_BumpMap ("Normalmap", 2D) = "bump" {}8.& &_BackColor ("Back Main Color", Color) = (1,1,1,1)9.& &_BackMainTex ("Back Base (RGB) Gloss (A)", 2D) = "white" {}10.}11.SubShader {12.& &Tags { "RenderType"="Opaque" }13.& &LOD 40014.& &Cull back15.& &16.CGPROGRAM17.#pragma surface surf BlinnPhong18.19.20.sampler2D _MainT21.sampler2D _BumpM22.fixed4 _C23.half _S24.25.struct Input {26.& &float2 uv_MainT27.& &float2 uv_BumpM28.};29.30.void surf (Input IN, inout SurfaceOutput o) {31.& &fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);32.& &o.Albedo = tex.rgb * _Color.33.& &o.Gloss = tex.a;34.& &o.Alpha = tex.a * _Color.a;35.& &o.Specular = _S36.& &o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));}37.ENDCG38.39.& &Cull front40.& &41.CGPROGRAM42.#pragma surface surf Lambert43.44.sampler2D _BackMainT45.fixed4 _BackC46.47.struct Input {48.& &float2 uv_BackMainT49.};50.51.void surf (Input IN, inout SurfaceOutput o) {52.& &fixed4 c = tex2D(_BackMainTex, IN.uv_BackMainTex) * _BackC53.& &o.Albedo = c.54.& &o.Alpha = c.a;55.}56.ENDCG57.}58.FallBack "Specular"59.}此方式下反面可以单独指定纹理,不指定就直接显示指定的反面颜色,渲染效果如下?&&以上只是介绍一个基本思想,在这个基础上能应该能衍生出无穷的变化。对自定义shader有兴趣的可以参考系统手册和Nvidia的CG教学手册。不过千万不要动不动就使用双面材质,因为会增加系统负荷,应该只用在需要的地方。&把以上代码起个名字另存为.shader文件,导入工程assets,就能直接使用。
教你使用PS来制作unity3D随机地形
最近在用C4D做模型及动画,收集点快捷键用用
[动画模块]
记录激活的物体 F9
自动关键帧 Ctrl + F9
点级别动画开关 L
到第一帧 Shift + G
到前一个关键点 Ctrl + F
到前一帧 F
到下一个关键点 Ctrl + G
到下一帧 G
到结束帧 Shift + F
--------------------------------------------------------
[属性管理器]
新建属性管理器 Shift + F5
--------------------------------------------------------
[Body Paint 3D]
顺时针旋转画笔 Alt Alt + . or Alt + ]
逆时针旋转画笔 Alt + , or Alt + [
增大画笔尺寸 . or ]
减小画笔尺寸 , or [
增加画笔锐度 Shift + . or Shift + ]
减小画笔锐度 Shift + , or Shift + [
增加笔触压力 Ctrl + . or Ctrl + ]
减小笔触压力 Ctrl + , or Ctrl + [
--------------------------------------------------------
另存目录 Shift + Ctrl + S
导入文件夹 Shift + O
导入文件 Shift + Ctrl + O
打开目录 Ctrl + O
新建目录 Ctrl + N
--------------------------------------------------------
打开控制台 Alt + F9
打开坐标管理器 Shift + F7
变换坐标系 W
剪切 Ctrl + X
关闭窗口 Shift + W
删除 Backspace
弹出盒式菜单 V&
打开F-Curve 编辑器 Shift + F4
--------------------------------------------------------
新建项目 Ctrl + N
合并项目 Shift + Ctrl + O
打开项目 Ctrl + O
关闭所有项目 Shift + Ctrl + F4
另存物体 Shift + Ctrl + S
关闭项目 Ctrl + F4
保存项目 Ctrl + S
--------------------------------------------------------
[材质管理器]
另存材质 Shift + Ctrl + S
载入材质 Shift + Ctrl + O
新建材质 Ctrl + N
打开材质管理器 Shift + F2
--------------------------------------------------------
[物体管理器]
载入物体 Shift + Ctrl + O
场景信息 Ctrl + I
将所选物体打组 Alt + G
将所选物体解组 Shift + G
打开物体管理器 Shift + F1
另存物体 Shift + Ctrl + S
--------------------------------------------------------
[图片浏览器]
灰度通道 S
红色通道 R
绿色通道 G
蓝色通道 B
打开图片浏览器 Shift + F6
--------------------------------------------------------
[结构管理器]
导入ASCII 码 Shift + Ctrl + O
跳到最后 End
跳到上一选择处 L
跳到下一选择处 N
跳到上一页 Page Up
跳到下一页 Page down
跳到开始处 Home
顶点贴图模式 V
--------------------------------------------------------
打开时间线 Shift + F3
--------------------------------------------------------
移动视窗 1, Alt + MMB 热键
缩放视窗 2, Alt + RMB 热键
旋转视窗 3, Alt + LMB 热键
使视窗适合所选元素大小 S, Alt + S
使视窗适合激活物体大小 O, Alt + O
使视窗适合场景(不含摄像机和灯光) H, Alt + H
定制所有视窗 Alt + V
打开渲染视窗 Ctrl + R
取消视窗变化 Shift + Ctrl + Z
重做视窗变化 Shift + Ctrl + Y
最大化视窗1 F1
最大化视窗2 F2
最大化视窗3 F3
最大化视窗4 F4
转变为四视窗 F5
切换活动视窗 Page Up
显示切换快捷菜单 N
刷新视窗 A
显示物体手柄 Alt + D
使用Isoline 编辑 Alt + A
--------------------------------------------------------
时间弯曲 J 热键
--------------------------------------------------------
桥接 B, M B
闭合洞口 M D
创建面 M E
切割边 M F
设置点的位置数据 M L
移动边 M O
缝合(点、边) M P
焊接点 M Q
权重 HN M R, . 热键
挤压 D, M T
向内倒角 I, M W
连续挤压 M X
平滑扩展 M Y
法线移动 M Z
法线缩放 M #
法线旋转 M ,
分离被选择元素 U P
反转法线 U R
移除多边形 U E
三角面转换 U T
对齐法线 U A
转换为可编辑物体 C
多边形再三角化 U G
所选面转为四边形 U U
移动视窗 1, Alt + MMB 热键
缩放视窗 2, Alt + RMB 热键
旋转视窗 3, Alt + LMB 热键
移动物体 4 热键
缩放物体 5 热键
旋转物体 6 热键
缩放模型 7 热键
默认建模方式 Alt + Q
调节式建模方式 Alt + E
点边面自动转换建模方式 Alt + W
移动工具 E
旋转工具 R
放缩工具 T
切换选择工具 Space
切换子物体编辑方式 Return
取消动作 Shift + Z
全选 Ctrl + A
选择相连的 U W
取消选择 Shift + Ctrl + A
自由选择 8 热键
选择 9 热键
框选 0 热键
转换选择(子物体) U X
选择边缘 U Q
填充选择 U F
扩展选择 U Y
Ring选择 U B
Loop选择 U L
收缩选择 U K
弹出建模工具菜单 Alt + Ctrl + V&
[动画模块]
记录激活的物体 F9
自动关键帧 Ctrl + F9
点级别动画开关 L
到第一帧 Shift + G
到前一个关键点 Ctrl + F
到前一帧 F
到下一个关键点 Ctrl + G
到下一帧 G
到结束帧 Shift + F
--------------------------------------------------------
[属性管理器]
新建属性管理器 Shift + F5
--------------------------------------------------------
[Body Paint 3D]
顺时针旋转画笔 Alt Alt + . or Alt + ]
逆时针旋转画笔 Alt + , or Alt + [
增大画笔尺寸 . or ]
减小画笔尺寸 , or [
增加画笔锐度 Shift + . or Shift + ]
减小画笔锐度 Shift + , or Shift + [
增加笔触压力 Ctrl + . or Ctrl + ]
减小笔触压力 Ctrl + , or Ctrl + [
--------------------------------------------------------
另存目录 Shift + Ctrl + S
导入文件夹 Shift + O
导入文件 Shift + Ctrl + O
打开目录 Ctrl + O
新建目录 Ctrl + N
--------------------------------------------------------
打开控制台 Alt + F9
打开坐标管理器 Shift + F7
变换坐标系 W
剪切 Ctrl + X
关闭窗口 Shift + W
删除 Backspace
弹出盒式菜单 V
打开F-Curve 编辑器 Shift + F4
--------------------------------------------------------
新建项目 Ctrl + N
合并项目 Shift + Ctrl + O
打开项目 Ctrl + O
关闭所有项目 Shift + Ctrl + F4
另存物体 Shift + Ctrl + S
关闭项目 Ctrl + F4
保存项目 Ctrl + S
--------------------------------------------------------
[材质管理器]
另存材质 Shift + Ctrl + S
载入材质 Shift + Ctrl + O
新建材质 Ctrl + N
打开材质管理器 Shift + F2
--------------------------------------------------------
[物体管理器]
载入物体 Shift + Ctrl + O
场景信息 Ctrl + I
将所选物体打组 Alt + G
将所选物体解组 Shift + G
打开物体管理器 Shift + F1
另存物体 Shift + Ctrl + S
--------------------------------------------------------
[图片浏览器]
灰度通道 S
红色通道 R
绿色通道 G
蓝色通道 B
打开图片浏览器 Shift + F6
--------------------------------------------------------
[结构管理器]
导入ASCII 码 Shift + Ctrl + O
跳到最后 End
跳到上一选择处 L
跳到下一选择处 N
跳到上一页 Page Up
跳到下一页 Page down
跳到开始处 Home
顶点贴图模式 V
--------------------------------------------------------
打开时间线 Shift + F3
--------------------------------------------------------
移动视窗 1, Alt + MMB 热键
缩放视窗 2, Alt + RMB 热键
旋转视窗 3, Alt + LMB 热键
使视窗适合所选元素大小 S, Alt + S
使视窗适合激活物体大小 O, Alt + O
使视窗适合场景(不含摄像机和灯光) H, Alt + H
定制所有视窗 Alt + V
打开渲染视窗 Ctrl + R
取消视窗变化 Shift + Ctrl + Z
重做视窗变化 Shift + Ctrl + Y
最大化视窗1 F1
最大化视窗2 F2
最大化视窗3 F3
最大化视窗4 F4
转变为四视窗 F5
切换活动视窗 Page Up
显示切换快捷菜单 N
刷新视窗 A
显示物体手柄 Alt + D
使用Isoline 编辑 Alt + A
--------------------------------------------------------
时间弯曲 J 热键
--------------------------------------------------------
桥接 B, M B
闭合洞口 M D
创建面 M E
切割边 M F
设置点的位置数据 M L
移动边 M O
缝合(点、边) M P
焊接点 M Q
权重 HN M R, . 热键
挤压 D, M T
向内倒角 I, M W
连续挤压 M X
平滑扩展 M Y
法线移动 M Z
法线缩放 M #
法线旋转 M ,
分离被选择元素 U P
反转法线 U R
移除多边形 U E
三角面转换 U T
对齐法线 U A
转换为可编辑物体 C
多边形再三角化 U G
所选面转为四边形 U U
移动视窗 1, Alt + MMB 热键
缩放视窗 2, Alt + RMB 热键
旋转视窗 3, Alt + LMB 热键
移动物体 4 热键
缩放物体 5 热键
旋转物体 6 热键
缩放模型 7 热键
默认建模方式 Alt + Q
调节式建模方式 Alt + E
点边面自动转换建模方式 Alt + W
移动工具 E
旋转工具 R
放缩工具 T
切换选择工具 Space
切换子物体编辑方式 Return
取消动作 Shift + Z
全选 Ctrl + A
选择相连的 U W
取消选择 Shift + Ctrl + A
自由选择 8 热键
选择 9 热键
框选 0 热键
转换选择(子物体) U X
选择边缘 U Q
填充选择 U F
扩展选择 U Y
Ring选择 U B
Loop选择 U L
收缩选择 U K
弹出建模工具菜单 Alt + Ctrl + V
flash rpg网页游戏的成本
或许会有启发
(文字转自天地会)
随着互联网的发展,网页游戏越来越多,如今国内90%以上是flash网页游戏,今天来具体说一下现在游戏开发的具体成本。
   flash游戏的成本是非常高的,一款好的网页游戏,其总成本不下于 100 - 200万¥,所以现在游戏行业竞争也比较激烈,在市场大环境下,许多游戏开发商制作出来游戏,最后因为自身无法再抽出资金或无法得到投资商的投资维持运营,只得请专业大游戏公司代理或托管运营,或将版权卖出。在这种情况下,或许成本都难以收回,更别说盈利。
  下面列出一些游戏开发的基本支出:
flash rpg游戏开发人员成本
职位职责人数/名月薪/¥月总薪资/¥年总薪资/¥
      
AS程序     
主程序 12000020000240000
程序员 4800032000384000
      
美工     
主美工 11200012000144000
FLASH动作 5500025000300000
FLASH动画 18000800096000
原画 3600018000216000
场景 4500020000240000
界面UI 18000800096000
      
服务器端     
主程序 11300013000156000
程序员 2700014000168000
数据库 11000010000120000
      
策划     
主策划 11000010000120000
策划 2500010000120000
数值策划 2700014000168000
      
合计 29 2140002568000
硬件支出成本
名称数量金额/¥
服务器/带宽130000/年
宽带100M电信/光纤35000/年
电脑29145000
笔记本520000
正版软件adobe/2套 windows/2套 autodesk/2套50000
房租300平米200000/年
装修 200000
空调312000
水电 10000/年
杂费 5000/年
办公用品/耗材 20000/年
保险/五金/补贴 50000/年
营业税/年审 50000/年
合计 827000
  根据以上表得出一年的成本大约 3395000¥,那么半年大概 1697500¥,其实除了以上,还有运营及推广方面的支出,通常游戏开发只需要 4 - 8个月时间,因为现在的 flash开发团队以及配套的各体系非常完善,相对于以往 1 - 3年的开发周期,已经缩短了很多,甚至一款小型在线游戏能够缩减至 1 - 2个月,但由于游戏市场竞争的存在,为了能够吸引玩家试玩,往往游戏需要在中型和大型之间选择,这无疑增加了成本,最终游戏开发的成本取决于开发周期和运营推广两方面,至于能不能最终成功运营一款游戏,这就要看游戏本身的质量和推广的效果以及玩家对待游戏的态度。
Unity3D美工需要知道的知识
1.引擎没有说具体的面数限制,按机器性能而定。
2.导入图形或者MESH的方法无非两种,一种是直接拷贝到文件目录下的Assets文件夹下面,Unity3d引擎会自动找到添加的文件,并且能在PROJECT面板中找到它。另一种是我们在PROJECT面板中用右键菜单,导入素材。
当然,我是用MAYA导入的,U3D引擎对于MAYA的支持还是不错的,但是也需要注意,不要用中文的目录结构,最好直接从MAYA的工程文件夹中导入,最好在导入MESH前先吧贴图文件放到相应的文件夹,或者相关文件夹的子文件夹。
在我们导入场景文件的时候,需要在导入设置中勾选创建碰撞,这样导入的场景我们就可以踩在上面了。(这跟我们添加碰撞组件是有些不同)
3. Unity3d引擎支持大多数常用的贴图,比如漫反射贴图,高光贴图,法线贴图。如此一来,它就成了一个名副其实的次时代引擎了。当然与UNREAL引擎的强大材质编辑器不同,U3D引擎主要是编辑材质的方式是使用一种专门的语言,类似于CgFX和Direct3D的语法。当然如果不是专门的图形程序员,我们只要掌握相关的SHADER的使用方法就可以了。在我们安装完U3D引擎后,系统自带的SHADER足够我们日常大多数情况下使用了。如果我们还有特殊的要求,可以去官网上下载相关的程序,然后把代码保存为 .shader 的文件,放到相应的目录底下,然后我们就有了这种SHADER。
掌握并且理解了上面我说的三点,你就可以作为一个U3D引擎的美工开始工作了。其中有几个需要我们进行深入探讨的几个方面:一是导入的MESH的要求,如何减面,UV的情况怎样,是否可以重叠UV。 二是导入的贴图规范,我们的各种贴图要达到怎样的程度才能导入,并不是直接拍了照片贴上就很有效果的,我们需要在三维软件中烘焙,之后才能导入。还有光照贴图怎么制作。 三是各种材质的应用,比如说我们最常用在皮肤上的3S材质效果,如何在U3D引擎中实现这种效果?
至此,你可以轻松的驾驭U3D引擎的Assets部分了。
然后我们要用引擎构建关卡。好吧现在你要成为一个U3D引擎的关卡设计师,当然这里面也有很多美工要做的事情。我们不用每天对着素材模型,贴图骂娘了。
作为关卡设计师,特别是U3D的,一定要有一个GAME OBJECT的概念,在这个可爱引擎中,我们可以看到各种的元素都是由GAME OBJECT组成的,在GAME OBJECT上我们又可以添加组件在实现特定的功能,比如最简单的位移。我在第一次使用这个引擎的时候,突然兴致大发想要在场景中创建一盏灯,弄了半天都没成,后来才明白,灯光是要附着在GAME OBJECT上的。同理,声音也是要附着在这上面的。
还要有一个PREFABS得概念,就在层级菜单中的蓝色文字所代表的属性,其实就是在游戏中可以无限复制的意思,比如子弹,比如无数的需要出现的小物件儿。
类似于三维软件以及其他引擎,U3D的灯光分为那么普通的几类,电光源、方向光、自然光。了解灯光的属性和使用方法。
还有U3D引擎的物理系统。当我看到这个系统的时候我的心都开花了,一想到各种独立游戏中无敌的物理效果心里就暗爽。比如我们可以用最简单的方法做一个足球游戏。
还是做游戏好,这个引擎能做网页游戏,也可以做PC单机游戏,网络游戏,也可以做IPHONE平台的手机游戏。真是万能了!
当然,上面很多都是初学时候的经验,下面是我后来加上的一些内容,是经过学习总结和辛苦翻译的。
让你的游戏能够顺畅的运行是成功的第一个要求。感谢UNTIY,他们通过大量的优化和调整可以让这个引擎发布的游戏运行于各种不同性能的硬件系统。下面是一个通用的优化游戏性能的方法。
总体来说:合并,合并,合并!
如果你比较关心游戏的速度,请合并模型。最好能够把合并的模型使用同样的材质和贴图。Rendering Statistics(渲染静态网格)窗口时很有用的!
现在的图形显卡可以很好的支持很多的多边形,但是他们他们还是有一些瓶颈的。所以如果你有一个有100个三角形的MESH,它渲染起来所需要花费的运算跟1500个面数的物体是没有多大差别的。因此最佳的渲染设置时每个模型大约个三角面。
只有在游戏组件中的属性栏中勾选Mesh Renderer选项显卡才会渲染相应的模型,并且在场景中的空的GameObject组件是不会被渲染的。
&&&&& 所以再次重复,最好的导入渲染设置时合并Objects直到他们每个模型在1500个三角面面甚至更高一些,并且为整个模型使用一个材质。
如果只是把两个模型合并在一起但是不共同使用同一个材质并不会给你的图形带来一点优化。如果你想有效的合并物体,你需要保证你合并后的模型使用一个材质。(其实就是尽量减少材质球的数量)
在你合并物体的时候需要知道一件事:如果你在你的场景中用到了很多小的灯光,你可以把场景中离得很近的物体合并为一个Object。
按照上面的思路,如果一个MESH具有多个材质球,那就说明在计算机渲染的时候是要进行多重运算的。最普遍的你之所以一个MESH用多个材质的原因是因为两个材质不能使用相同的贴图。所以如果你想要优化渲染设置,你最好确定你合并的那些MESH的材质是相同的。
&&&&& Unity对于向显卡导出各种多边形是很擅长的,它可以很详尽的把所有的图形导入到显卡,并且优化数据。你需要做的只是确定你的图形显示卡正常工作。而不是要调整很多手动调节的设置。
&&&&& The number of Pixel Lights affecting an object heavily affects performance. 相当数量的实时灯光对于游戏速度也是有限制的。
如果你想要有一个不错的展示,并且不关心凹凸贴图和实施灯光(Bumpmapping or Pixel Lighting),可以去Edit-&Render Settings...然后设置Pixel Light Coun为0.这将会给所有的Object使用顶点灯光。这将会让所有的物件在每一帧都会被渲染一次。这是一个比较极端的LOD设置,所以你的游戏就可以再比较老的图形显卡下运行了。
Pixel lights 像素灯光
如果你使用的是像素灯光,那么每个被这个灯光照射到的GameObject都会在每一帧被渲染一次。如果你合并了两个距离很远的物体,他就会增加物件的大小,然后你就会需要一些灯光来照亮这些物体。如果你的物件是分开的,灯光将不会渲染远处的物体,这将会导致模型得到多次渲染,相比较没有被合并的模型,我们并没有得到多少实惠。因此,如果你的GameObject中有很多独立物件的时候,你可以让他们离得比较远。
当渲染一个模型的时候,UNTIY如果发现很多灯光在MESH的周围,它将会找出那个是主要影响这个MSEH的灯光,在Edit-&Render Settings中的设置就是用来调整有多少个灯光最终作为像素灯光有多少作为顶点灯光。
每一个灯光通过计算离MESH得距离和自己灯光强度来决定自己的重要程度。
在游戏中的某些灯光是很重要的,所以,每一个灯光都会有一个Render Mode设置,这个用来设置哪一个可以被用来设置为Force Pixel 或者 Force Vertex.
想象一下假如我们是一个驾车的游戏,你的角色在夜晚打开车灯,前面的车灯就是游戏中最重要的灯光。因此,前大灯的渲染模式将会被设置为Force Pixel
当然如果你有一个不是很重要的灯光,也是选择使用"Force Vertex"的渲染模式,这个方式也不会对游戏的速度有很大的影响的。
阴影普遍运算量比较大。如果运用得当,可以让游戏画面出色,你也可以乐队相关文档。
角色建模优化
你的角色应该只被用于一个蒙皮模型渲染器。当然有时候可能需要多个蒙皮的模型,但是如果你同时用两个蒙皮来作为一个角色,它就相当于你进行了两个角色的运算量。
你同样需要保持MESH的材质数量尽可能低。一般建议身体的材质数量为2-3个,当然如果你有武器的材质,也是需要单独一个的,因为你需要换武器。
减少骨骼的数量,一般来说游戏中的骨骼数量为15-60个。骨骼越少运行速度越快,一般来说30块骨骼就可以让角色动的很舒服了。如果你不是有特殊的设置,我们强烈建议每个角色30个骨骼。
&&& 多边形的数量主要是看你对游戏的质量要求,500-6000个三角面是比较推荐的。如果你的游戏场景中将会出现多个角色,那么就要适当的降低一下多边形数量了。如果你想要在比较老的机器上运行,你需要更少的多边形数量。比如,半条命2游戏的角色通常是个三角面。达到AAA标准的次时代游戏比如像是PS3或者XBOX360上的游戏角色通常有个三角面。
&& 把IK控制器和FK控制器分离,当动画导入以后,IK的节点将会烘焙到FK上,其实UNITY并不需要IK节点,你可以删除它们。
&&& 创建一个公共的骨架,这样就可以让你让不同的角色之间共享动作了。
给每一个骨骼正确的命名,方便团队工作,也方便类似于Motionbuilder的动作软件,不然你得每次指定骨骼。
优化综合的图形卡
优化模型参数
使用尽量少的面
&& UV接缝的数量尽可能少
烘焙灯光到光照贴图或者到顶点颜色。
MAYA具有不错的制作光照贴图的工具,UNITY可以从MAYA中导入第二个UV贴图或者顶点颜色。
制作环境的光照贴图的流程要比直接在场景中打灯光要繁琐的多,但是运行速度明显增快。
如果你使用全局光并且平滑光照贴图,可以让画面效果明显增强。
甚至次时代游戏比如战争机器始终在很多方面使用光照贴图。通常他们在场景中使用光照贴图,然后在上面放置一个动态灯光。在UNITY中也可以制作相应的光照贴图Shader.
shader(三)
shader(二)
shader(一)
U3D的朋友们来南京可要找我玩啊;) QQ:
最近好忙,无暇更新小站,等我回来了继续!!!
EZGUI&NGUI 比较
& & & The following post might be helpful for those standing on the crossroad which GUI framework to go with in Unity project. Among lots of more or less advanced 3rd&party options there are just two which can be seriously considered: EZGUI and NGUI. I&ll clarify major differences I&ve noticed in my experience working with both of them.EZGUI and NGUI provide great features for making in-game UI easily and efficiently. However they use different implementation approaches. EZGUI comprises lots of instruments and controls with plenty amount of settings, so you can tweak almost every parameter of any UI element. In opposite, NGUI provides lots of small components and I like its minimalism, short, clean and understandable code. Both EZGUI and NGUI target &1 draw call for UI& and they&ve got very close. Of course &one-draw call for UI& isn&t the main concern, but why not to have such a great addition to your well-structured and optimized code.& & & &The following table contains a comparison of both frameworks with features I find important:
Pixel perfect
Scale of controls is adjusted automatically once on a scene start. Note: it has issues losing render camera reference when instancing UI as a prefab
Scale of controls is adjusted automatically every time resolution changes. Also has ability to apply&half-pixel-offset
Generates ordinary gameobject with geometry, so everything is visualized by Unity itself
Uses several ways of visualization: &geometry& and &gizmos&, since all UI elements are a part of a single mesh
Access from code
Methods from a specific controller-script are linked with control events.
There can be some issues with instancing objects and losing references. Another way &using delegates can be more convenient in some cases
Similar as EZGUI, but here you have helper components, such as UIButtonMessage, which send specified message to a gameobject (or to itself, if target is null), on selected type of interaction. Also you can access to last used control through static variables such as UICamera.lastHit or UICheckbox.current
Ease of controls creation
Empty GameObject is created and attached with necessary components
Provides handy wizards for creating all kind of controls.
Workflow speed
Smooth, but slow. Searching scripts which aren&t included in common menus, adjusting tons of settings, fixing broken atlases and lost camera references (most likely I&m not the only one who experienced these issues)
Supersonic! Just a little slowdown when creating atlases for sprites in the beginning, and then pure enjoyment of future process!
Drag and Drop
Both frameworks have this feature. Just a little note: any object in NGUI with a collider can be draggable
Atlases creation
Atlas has to be recreated every time you want to add/change an image in it. EZGUI can scan all objects, even in a project folder, find all &using the same material and then regenerate the atlas. This process takes lots of time and you should be very accurate not to break something
Atlas can be managed in two ways: either using fast and handy Atlas Maker to add, delete or modify images in atlas or managing sprites in atlas already created via Atlas prefab inspector
Panels switching
Making menus with switching panels has never been easier due
EZGUI&s powerful abilities
Panels can be switched easily as well, but some additional scripting is required. Panels can be switched through animations and helper components, but I haven&t found any direct way to enable one and disable another panel
Additional stuff
Since EZGUI is based on Sprite Manager, classes (e.g. Sprite etc.) can be quite useful in 2D games for environment creation, backgrounds etc.
Sprites can be used, however with some restrictions like any control must have a parent like panel or UIRoot.
And here is a comparison by controls implemented in the frameworks.
Sliced sprite
Tiled sprite
Filled sprite
Simple button
Image button
Toggle button
Radio button
Progress bar
DropDown list
Scrollable lists
I was really excited with Sliced Sprite from NGUI. When there is an objective to create a resizable window that should be pixel-perfect in different sizes, have a frame outside of it and be filled with a pattern - that&s exactly when Sliced Sprite can manage everything, just specify areas on texture to be used as a frame, corners and filling.Tiled Sprite can be implemented manually with EZGUI, however it won&t be so easy. Tiled sprite always stays pixel-perfect, and it tiles the texture you&re using when scaling. That&s very handy for creating backgrounds for example.NGUI extends Unity with a bunch of useful hotkeys which are really nice-to-have, e.g. Ctrl+Shift+N to add new empty GameObject as a child to selected one, hotkey for toggling gameobject&s activity, handy buttons for resetting transform&s position, rotation and scale.Both frameworks are provided with detailed documentation describing every script, every component, property or method. Additionally, NGUI is shipped with a lot of step-by-step tutorials, video and write-up lessons for beginners.EZGUI is based on Sprite Manager 2 (developed by Above and Beyond Software). SM2 provides features for creating 3D mesh sprites, customizing and changing their parameters in runtime, as well as creating texture atlases, so that all sprites in a scene are a part of single batch and are drawn in one draw call.And here&s my subjective comparison of these both frameworks:
Functionality
Flexibility
Reliability
Extensibility
&that means I like NGUI much more, however I haven&t described another very important difference between NGUI and EZGUI - the way of working with them. I&ll demonstrate it in my next post, stay tuned.
一个3D大型游戏开发的基本过程(非Unity路线)
1.引擎设计
引擎的开发往往是由设计人员协助程序人员完成的。在这里要明确一点的是,游戏的好坏跟引擎有很大的关系。所以引擎设计的是否合理就从某个程度上反映了游戏的水平。因此引擎设计应从以下几点出发:
1.1功能分类
任何一款游戏都有好多的功能,比如攻击,使用物品,施放魔法,移动,键盘输入,更换装备等等等等......而这些全部都需要用引擎来实现。所以,在设计的时候就有必要考虑将功能进行分类和简化,并且将某些功能的实现可以看成是另外几个功能同时作用时的结果。从最基础的功能开始着手设计,不断的利用已完成的功能去实现新的功能。但要注意不要将两个或多个功能相互混淆或相互倚赖,它们之间应该是独立的。即,每一个在引擎里定义了的功能都可以脱离其他功能单独使用。而其他功能的实现只需要调用一下这些功能的结果就可以了。
1.2物品清单
物品清单本来是应该脱离引擎存在的,它可以通过脚本去实现。但这里所说的物品是构成世界的最基本的元素,也就是一些原始资源。比如:男人、女人、动物1、动物2、植物1、静物1等等。有了这些最原始资源,我们的引擎就显得有点意思了,我们就可以用引擎就构造世界了。
1.3地图编辑器
是的,地图编辑器最好也包含在引擎当中。其目的不是为了满足玩家的需求,而是为了能够反复利用引擎去开发不同游戏。还记得我们已经有了一些原始的资源吗?那就拿来创造世界吧!当然,我们手头有的资源太少了,地图编辑器还需要更多的资源,比如怪物、宝物、地形等等。
游戏引擎应该提供一个后门为管理人员准备。它不仅能够提供一个不经过编译而直接修改游戏内容的方法,而且也为今后的测试提供了极大的方便。
OK了,到了这里,设计的工作基本上就差不多了。当然不要以为引擎的开发是这样的简单,大量的工作还是由程序人员完成的。我们只是给程序人员提供一个导向,或者说是标准。制定这个标准的目的是为了今后开发的方便,而不是为了跟程序员找别扭。所以在这方面还是多听些程序的意见比较好。
现在我们终于有了一个引擎了!(^_^)下面的工作会变的轻松很多
2.游戏规则
游戏之所以好玩,就是因为游戏对每位玩家所采用的规则都是相同的。所以优秀的游戏必定有优秀的规则,无论你要设计的游戏是什么,先把最为主要的规则定下来。
2.1胜负判定
不要认为胜负判定非常容易,其实游戏只要复杂一点,那么胜负的判定就会变的很困难。比如说当一个炸弹同时炸死自己和仅剩的一个敌人的时候如何判定胜负?或者当双方积分相同的时候如何判定胜负?当然,最简单的办法就是和局。所以首先要有对胜负(和)的判定。
2.2公式算法
游戏中难免有这样那样的数值,之间的换算关系是需要好好研究的。这方面有专门的文章讨论,这里不多说。
2.3随机事件
游戏之所以好玩还有一个原因就是随机事件。当随机时间发生的时候上帝都在祈祷。如何充分的利用随机事件来让玩家体会到更多的乐趣的确需要好好的考虑。
当然,根据不同的游戏还应该有更多的公式,这里无法一一列举出来探讨。
有些游戏有剧情,比如说RPG。而剧情的设计往往是爱好者的看家本领,这里不多做讨论。但本人还是建议注意以下几点。
庸冗繁琐的剧情是最令玩家们所讨厌的。所以在无法保证剧情质量的时候还是先考虑一下保证数量上的简洁,最起码不会被骂做&裹脚布&。
相信很多玩家都喜欢多结局的RPG,有悲剧结局也有喜剧结局,有的还有恶搞结局。所以在结局处理上可以比故事情节上多下些工夫。其实无厘头的结局也不失为一个选择。
3.3支线剧情
有的玩家不喜欢玩支线剧情,也有的专门喜欢玩支线剧情。其实这个实在没什么好争论的,设计的时候可以完全兼顾。主线剧情环环相扣,支线剧情费尽心思,两者穿插。这样就可以满足两种玩家的要求。何乐而不为?
现在一款简单的游戏基本上就有个轮廓了,但是我们还可以丰富它,让它成为赚钱的利器。
先来点韩国泡菜的味道
4.法术&物品&属性&其他
玩家要得到最好的,我们就给他最好的。作为交换条件,玩家要付出更多的时间去&泡&。
法术不要弄太多,要有针对性。不要将游戏做成NWN那样。每个人都可以从不同角度给NWN做出很高的评价,但真正窝在家整天玩的不是NWN,而是TFT。
&究级装备&&黄金宝剑&&暗金套装&&超级极品&你的游戏需要这些吗?为什么不呢?一切有利与赚钱的都值得考虑。
星际和TFT是当今最火的游戏中极耀眼的两个,值得称赞的地方太多了。但是有一点大家应该注意到,属性的修改是每个版本必须做的工作。因此我们在设计的时候也要着重考虑这个环节,这不仅可以让游戏变的趋于完美。更主要的是可以获得很多免费的评论和宣传,也会招来很多新的玩家。
需要提的太多了,怪物啊,BOSS啊,迷宫啊......这些具体的问题可以根据具体的游戏来确定。有一点是不变的,那就是游戏要用来赚钱,这是大前提。
好了,到这里大家似乎已经迫不及待的去写自己的策划案了。但是请大家不要着急,还有一些非常重要的问题没有说。
5.界面&操作
我们的电脑不是一打开就自动进入游戏的,当我们用鼠标双击一个应用程序图标之后,一切就变的难以琢磨。
界面的设计力图简洁、明了,能够让玩家一眼人出来哪里是New Game、哪里Save、哪里Load,当然最为重要的就是要在明显的地方放上Quit。不要在界面里跟玩家玩&捉迷藏&。F1一定要设计,但是千万别在这里显露你的文笔,没有几个玩家愿意花十几分种去看HELP里的信息。更不能让玩家去找按钮,应该直接用箭头给玩家指出来。有些按钮或状态栏隐藏在深一些的菜单中,玩家不见得一下子就能找到,一定要有演示动画指明地方。要知道,玩家停留在HELP信息中的时候是最容易放弃一款游戏的。
最好采用通用的操作,比如说鼠标左键是选取,右键是放弃。关闭按钮在窗口右上方或窗口底部明显的位置。鼠标移动最好是左键走,右键跑。键盘操作最好是W、S、A、D或&、&、&、&。设计师应该尊重玩家的操作习惯,这样容易博得玩家的认同感。还有,热键和自定义键位功能应该是为那些高级玩家准备的。这些东西不必要告诉新手,也没必要放在HELP信息里,让玩家自己慢慢的去摸索就好了。
Great to kill some issues with .net socket
I use .net/mono sockets in my Unity projects without any issues, but as Jormungandr says you can hang the whole game if you don't thread it.
If I do this:
& & &//SendAuthRequestToServer sends some data via UDP and waits for a response
& & & _thread = new Thread(SendAuthRequestToServer);
& & & _thread.();
it works great, BUT if I just call the method:
& & &SendAuthRequestToServer();
The game hangs until a response is received - don't think it crashes though - although I think the browser crashes on certain un-handled exceptions (not sure if this is ALL exceptions but if they are un-handled then it is bad anyway).
U4强势出线,福音啊!激动的记录下整个体验行程
游戏设计法则
暴雪公司游戏设计执行副总裁Rob Pardo曾在一次GDC大会上介绍了暴雪的11项游戏设计法则:
游戏玩法第一:众所皆知,游戏必须具有趣味性,而趣味性来源于游戏玩法,它正是直接将玩家引向游戏的重要原因。额外的趣味性能够成为玩家长期在游戏中逗留的刺激因素。
容易上手,难以精通:游戏必须简单易懂,拥有简单的机制和对象,以便所有人都能体验游戏,容易进入游戏世界。但除了容易上手之外,游戏还需具备一定的深度,《魔兽世界》中的公会袭击及角斗内容很难被玩家吃透。
发挥想象力:Rob Pardo还提到了游戏视觉设计的重要性,并以《魔兽世界》的UI为例进行说明。他称暴雪在这一点上并不成功,多数玩家采用了自定义的UI,而不是标准化的用户界面。
征服一切的能力:一些玩家在扮演Gnome Warrior时可以击败一些很强悍的事物,同时却常无法看到敌人的全貌。但正如Rob Pardo所言,这会增加玩家挑战并击败敌人的非凡感,为他们的带来史诗般的游戏体验。
浓缩才是精华:与《魔兽争霸》相比较,《魔兽世界》中的族群分类更少,但需要注意的是,这些元素却是暴雪精挑细选的结果。
巧妙设置文本内容:有趣的是,一般玩家都不喜欢看任务文本,但却不排斥体验游戏的故事情节。所以暴雪通过一些途径将任务文本融入故事中,丰富了故事情节。
提供奖励:玩家不喜欢被罚,但却很乐意获得奖励。Rob Pardo称《魔兽世界》的休息系统就属于此例。在最开始时,玩家因为玩游戏时间过长而遭罚(游戏邦注:例如经验值从100%跌至50%),这一点让他们极为反感,但Pardo改变了这个系统,让休息的玩家获得200%的经验值,不休息的玩家保持100%的经验值。从数学角度来看,这个系统实际上并无多大变化,但玩家就是喜欢这种调整。
减少对玩家的控制:为了不影响游戏玩法,暴雪不得不放弃一些很酷的动画和特效。Rob Pardo以召唤山峰为例,山峰会在一阵烟雾中从玩家脚下升起。但却得改变动画效果,减少对玩家的控制。
恰到好处的调整:&调整容易优化难&,游戏调整要兼顾保证趣味性,同时又要让玩家知道调整的目的所在。
逐步展开内容:有趣的是,暴雪会先在初期就展示相关内容,而不是等到项目完工或者完美的时候才推出所有内容。游戏开发者应打造一个鼓励根据反馈信息改进游戏,同时允许试错的环境。
重视游戏润色:不但游戏开发团队需要关心这一点,暴雪还引进其他团队成员,让他们测试游戏,从更新颖的角度提供反馈信息。
站长在关注

我要回帖

更多关于 无法创建家庭组 的文章

 

随机推荐