UNITY3D研究日记

Unity3D研究进展1

明明在流行RPGMAKER的恐怖解谜小游戏的时候,为什么我在研究这个3D游戏软件呢...

等弄完了果然还是继续回来研究RPG MAKER,因为又有一个新故事了TvT...


软件研究了三四天,

虽然途中经历了各种文件作完结果打不开只能重做的悲催事情,(我MAYA里的场景都白做了摔QAQ!)

但不管怎么样,这个经过数天的研究还是稍微有了一点成果,即使很渣...




做了一个简单场景的开头

 

 

比想象中好的是,因为是已经在商业制作圈里开始比较流行的东西,所以网上的教程很多,

而且软件自带的ASSET非常多,目前做到这样一个基本的空间漫步游戏是不需要用到编程,


目前遇到的问题有:

1,在U3里建的PLANE分割非常多,貌似会影响游戏容量和速度,在网上查了下说是从外部软件导入分割少的面比较好,但是导入新面后,贴图却不能符合尺寸,不知道该在哪里设定。

2,目前场景全都是面,好几十个面在hierarchy窗感觉占太多,不知道这个窗口里有什么整理的方法吗?(好像U3d里没有groupd的方法?)

3,用的是 first person controller 按理说在游戏里是看不到角色自身的,不过低头还是会看到角色控制器?


目前就是这些,其他还是研究中

这种一个人研究软件到吐血的感觉真是久违了,仿佛回到了努力的本科时代..

虽然很累不过很爽很有成就感..


Unity3D研究进展2-如何制作落叶效果今天又磨了几下,发现Unity这个软件虽然是3D但真的没有想象中那么难(<-只是你还没有做到难的地方啦!)

软件自带了很多效果都可以直接使用,像是树啊草啊风场啊雾效啊,各种碉堡~越研究越有意思!

于是给自己的场景也增加了一个雾效,瞬时感觉好多了。

 

顺便做了一个小楼梯

 

在楼梯上建了一棵树,想让这棵树落叶,却查了半天的教程都没看到落叶的制作方法,

自己琢磨了一下做了出来,当笔记也顺便当个简单教程写在这里好了,方便需要的同学参考~(学了才几天的人自己写教程了真是感动。。。)



首先在这里一定要用到的是Unity 3D自带的粒子系统,

之前不懂,所以在MAYA里废了大半天力做了一个落叶的动画,结果发现导不进来orz。。。

还是的在系统重新做一个T T(总是白做啊摔!)


然后你要有棵树(废话),自己建或者系统自带的都行


创建一个粒子系统

GameObject>Create other>Particle systerm

关于这个系统的参数大家自行上网查找对照,这里就不解释了

调整你的粒子合适的参数

start Rotation 我调的是0~360度随机,这样树叶就掉的样子不同,会更自然

start lifetime 这里是指粒子的寿命,也就是叶子存在时间,我让它落地的时候就归入泥土,所以就是落地的这断时间啦~

Gravity 重力,我觉得为了自然还是需要一点吧就加了0.1的重力

max particle 这个指最多粒子同时存在的个数,看需要而定~

Emussion 是树叶下降的频率,因为很慢我选了1,

shape: 是指粒子发射器的形状,我是一个向下的面

Velocity over lifetime 这个很重要,因为之前树叶是直接垂直向下落的,十分不自然,所以要加入飘动的效果就要靠这个~

这里比较推荐用curve

让x轴和Z轴都有一点摆动,这样树叶就是摇摇晃晃的飘下来了~

Render 树叶的材质当然也非常重要,这里加上你树叶的贴图就行了~


调整好这些参数,就有非常自然的落叶效果啦~

 

截图效果不明显啦= =|||,不过游戏落的还是不错的~(为了去掉贴图的白边弄了好久...)



室外场景继续研究中,

而目前的问题是

1 之后想做一个有微风拂过的草地,发现自建的模型不能受风场影响T T,只能看系统自带的怎么改了。。。

2  第一人称视角的摄像机移动太平缓,没有那种人一步一步走的感觉,不知道要怎么调整


之后还有室内和交互,这个练习就能完成了,继续加油><!


Unity3D研究进展3-迎风摆动的草地

这次终于把草地画出来了,

不过说实话画的时候因为把草的贴图换成黑色的文字,结果密集的把自己恶心到了orz。。。

 


请告诉我不恶心T T。。。

好吧 还是很恶心。。(谁能看出这是草啊摔!)只能之后调整颜色或形状来改善了orz


不过做出来真的并不难,系统自带的刷草功能,

先建一个地形,然后点击

这个来画草,可以编辑草的颜色,贴图,以及笔刷的大小。

稍微有点麻烦的是这些自带的笔刷都没有特别规整的,画起来总是画到路上。。。

再然后加一个风场在场景里就完成了


可以看到随风摇摆的草地,虽然由于我换成黑色文字的原因觉得略恶心orz



接下来将做室内的场景,现在遇到的问题就是要不要单独建立一个场景,因为直接加在之前的场景,包括音乐,雾效,风场也会沿袭。

有没有单独圈出一块区域不受影响的方法?实在不想单独再做一个场景啊T T

做完最后的室内场景,加上开关后,这个短的黑白平光各种偷懒概念游戏就算是完成了吧。

到时就来总结一下心得之类的,继续加油!


Unity3D研究进展4- GUI texure

中间隔了一阵没研究,这几天赶紧赶赶...

因为预想的游戏画面类似于电影,上下有黑色的长条遮盖,

所以这里就必须要用到UNITY里的GUI贴图。


解释一下GUI:

GUI是图形用户界面(Graphical User Interface)的缩写和简称,又叫图形用户接口。

简单说来也就是说在游戏里无论你怎么移动摄像机都不会改变的平面图像,一般多用于界面的使用~


创建也十分简单,

game object>great other>GUI texture


就会建一个GUI贴图


在属性里编辑替换你自己的图片

还有设定图片的长宽尺寸。


而关于x和y的坐标位置与我们的一般习惯的不同,是从左下角开始的~


详细看这个图:


 直到这里都很正常,不过在实际测试游戏的时候遇到了很大的麻烦


那就是由于播放窗口的大小不同,贴图位置也完全不同

当我们发布游戏的时候,并不能确保每个人的视窗和屏幕分辨率都是一样。

所以搜索一下各种结局方法。


发现很多人都是用写脚本的方式给出如果屏幕多大,就t贴图多大,位置怎样

但是对于完全不会java的人来说,根本就看不懂也觉得好麻烦额...

难道你要统计下所有的屏幕大小么...


纠结N久后终于发现了一段超好用的脚本~


控制GUI Texture的位置,置顶、置底、靠左、靠右、全屏的JS


var Relative : boolean ;
var Top : boolean ;
var Right : boolean ;
function OnGUI() {
    otherScript = GetComponent(GUITexture);//将GUITexture传递过来
    thetexture = otherScript.texture;//获取GUITexture的纹理
    if (Relative == true ){
        if (thetexture.width > thetexture.height) {
            W = Screen.width;
            H = (Screen.width*thetexture.height)/thetexture.width;
        } else {
            W = (Screen.height*thetexture.width)/thetexture.height;
            H = Screen.height;
        } 
    } else {
        W = thetexture.width ;
        H = thetexture.height ;
    }
    if (Top == true ){
        Y = Screen.height - H;
    } else Y = 0 ;
    if (Right == true ){
        X = Screen.width -W;
    } else X = 0;
    otherScript.pixelInset = Rect (X,Y,W,H);
    //print (otherScript.pixelInset );
}




将这套JS加在你的GUI贴图上

就会多出一个小界面,让你选择是置顶还是靠左还是同比


 

于是我的制作方法就是先做一条黑条,

建立两个GUI,分别都使用这个黑条贴图。


然后上面那条黑选择relative 和top 

下面那条只选择relative 

   


这样无论你的界面多大,窗口还是全屏,黑色的GUI贴图都会合适的改变自己大小,并且位置正确


效果:




我真心觉得界面简单是件多么美好的事...

(一想到要做点击界面按钮什么的就好累T T)


评论