Unity中GUITexture淡出淡入控制


开发环境

Window7

Unity3D  3.4.1

MB525defy Android 2.2.1

这周工作中写了一个第三人称控制器,手感和魔兽世界基本一致,这是羽化第二次写这种类似控制器了,因为前一次是为手机端写的,所以这次写的方面都很讨巧,包括性能方面都提升很多,估计手机端也要在这个控制器上改写~ ~爽啊,解决很多问题。这周和美术确定了人物制作方案,很多细节羽化都考虑不周全而美术方面想到了,的确受益匪浅,传说原来在EA当过美术的男人就是NB- - 今才和师傅吃了顿晚饭,小两口过得还不错,真有家的感觉。傻傻的大学过去了,毕业后留下的只是感慨,感慨物价,感慨工资,感慨人参啊,哎~ ~ 但事实是毕业以后师傅肥了不少,羽化却瘦了很多,悲剧啊-0- 最近玩一个第三人称的TD游戏,国内翻译叫“兽人必须死”,游戏内容很有创意,画面优秀,难度适中,就是bug多了点,陷阱和技能设计虽然很有趣,但还是欠缺了点平衡,这种动作加防守元素的TD说不定是以后的一种趋势,推荐给大家~ ~

这次羽化送上的是帮别人写的一个小脚本,作用是控制GUITexture的淡出淡入,虽然不知道这位网友用来干什么,既然她有需求,羽化以后也可能用得上,就简单帮她写了一个,这里拿出来给大家分享下,没经过优化,羽化准备以后再改写。

本文工程源码地址:

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /pub/2011/10/25/Unity中GUITexture淡出淡入控制/

本次学习:

1. GUITexture淡出淡入控制脚本

2. Unity3D MMO游戏人物制作初步研究(附送--)


1. GUITexture淡出淡入控制脚本

这次脚本很简单,直接贴出来了,其实做法很多,羽化用了一个很讨巧的方法而已,若有什么错误请各位看官指出- -

Fade.js只能用在GUITexture控件上

  1. var WaitTime : float = 10;  // 图片显示时间   
  2. var Speed : float = 0.01; //出现和消失速度   
  3. var time : float = 2; //淡出淡入间隔时间   
  4. var Alpha : float = 0.8; //显示图片最终透明度   
  5. var stop : boolean = false//暂停或者开始运行时是否运行   
  6. var Pictures : Texture2D[]; //显示图片数组   
  7. var x : float[];//图片数组对应X   
  8. var y : float[];//图片数组对应Y   
  9.   
  10. private var Fade : boolean;  
  11. private var rise : boolean;  
  12. private var i : int;  
  13. private var save : double;  
  14.   
  15. function Start()  
  16. {  
  17.     guiTexture.texture = Pictures[i];  
  18.     guiTexture.pixelInset.x = x[i];  
  19.     guiTexture.pixelInset.y = y[i];  
  20.     guiTexture.pixelInset.height = Pictures[i].height;  
  21.     guiTexture.pixelInset.width = Pictures[i].width;  
  22.     Fade = true;  
  23.     rise = true;  
  24.     Create.create = true;  
  25.     save = 0.0;  
  26.     i = 0;  
  27. }  
  28.   
  29. function Update()  
  30. {  
  31.     if(!Create.create)  
  32.     {  
  33.         Destroy(gameObject);  
  34.     }  
  35.     if(Input.GetKeyDown(KeyCode.Space))  
  36.     {  
  37.         stop = !stop;  
  38.     }  
  39.     if(!stop)  
  40.     {  
  41.         if(Fade)  
  42.         {  
  43.             FadeIn();  
  44.         }  
  45.         else  
  46.         {  
  47.             if(Time.time > save + WaitTime)  
  48.             {  
  49.                 FadeOut();  
  50.             }  
  51.         }  
  52.     }  
  53. }  
  54.   
  55. //淡入   
  56. function FadeIn()  
  57. {  
  58.     if(guiTexture.color.a < Alpha)  
  59.     {  
  60.         guiTexture.texture = Pictures[i];  
  61.         guiTexture.pixelInset.x = x[i];  
  62.         guiTexture.pixelInset.y = y[i];  
  63.         guiTexture.pixelInset.height =  Pictures[i].height;  
  64.         guiTexture.pixelInset.width = Pictures[i].width;  
  65.         guiTexture.color.a += Speed;  
  66.     }  
  67.     yield WaitForSeconds(time);  
  68.     if(rise && !stop)  
  69.     {  
  70.         Fade = false;  
  71.         rise =false;  
  72.         i++;  
  73.     }  
  74. }  
  75.   
  76. //淡出   
  77. function FadeOut()  
  78. {  
  79.     if(guiTexture.color.a > 0)  
  80.     {  
  81.         guiTexture.color.a -= Speed;  
  82.     }  
  83.     yield WaitForSeconds(time);  
  84.     if(!stop)  
  85.     {  
  86.         Fade = true;  
  87.         rise = true;  
  88.         save = Time.time;  
  89.         if(i == Pictures.Length)  
  90.         {  
  91.             Destroy(gameObject);  
  92.         }  
  93.     }  
  94. }  

这种方法允许效率并不高,还有很大的改良空间,但使用上完全可以应付各种需求。每个参数的作用羽化也有备注,这里Pictures,X,Y的Size必须一致,其他参数可以自行更改,要不然会报错哦- - 再者这里的X,Y是以屏幕中央为中点的,所以这里写得不够智能,大家可更具需求更改。


2.   Unity3D MMO游戏人物制作初步研究(附送- -)

与新来的3D美术同事研究了一个星期的人物制作方案,最终我们决定是使用换贴图和Mesh的方法,羽化前面的文章中有介绍过人物换装,但这种方法只能用在一些外部装饰物上,至于有蒙皮的身体换Mesh就会报错,所以这里身体上准备制作多个Mesh,适应各种不同身体装备,当然其中只有一个Mesh是Enable的,这里就需要羽化写代码控制了,其实在魔兽世界中也应该是用同种方式,但魔兽90%的装备只是换贴图(羽化的85法师和战士就是典型的例子- -),真正换Mesh身体的估计只有那些紫色装备,所以这样能节省很多资源,这只是初步研究的方案,以后若有机会羽化会写份详细的人物制作经验分享给大家~ ~

相关内容