Unity3D 资源管理 -- 基本概念

转载出处:http://blog.csdn.net/myarrow/article/details/42420329


1. 在Unity内部可创建的资源

    1)Shader(着色器)资源:定义物体的表面,与财质配合使用。
    2)Compute Shader(可计算着色器)资源:充分利用了DX11的一些特性,可创建非常炫丽的视觉效果。
    3)Prefab(预设、预制)资源:用户可使用它来创建一些重复性的物体,比如树木等重复性的物体,但预制更为强大的功能是运行实例化,即可以在程序运行时产生大量重复性的 物体,而且这种物体是非常节省资源的,并且可以通过脚本随时进行销毁掉。

    4)Material(材质)资源:物体可以通过材质定义外表,材质需要与Shader搭配使用,在材质的属性编辑中,可选择各种需要的Shader(着色器)
    4)Cubemap(立方体贴图)资源:它相当于一种纹理,可以立方体的6个面上来定义纹理,来产生需要的环境效果。

    5)Lens Flare(透镜耀斑)资源:当摄像机镜头面向强光(如太阳) 时,用它来产生炫丽效果,因此此项资源一般会与摄像机配合使用。

    6)Render Texture(渲染纹理)资源:也是一种材质资源,在渲染纹理中,可以把某个场景进行单独的渲染,然后通过渲染纹理将其转换成一副独立的纹理,并覆盖或包裹在需要的物体上,即在一个物体的表面上产生电影纹理的效果。

    7)Physic Material(物理材质)资源:主要用在刚体碰撞中,它可以定义刚体表面的各种物理特性,如摩擦力、弹力等等。

    8)GUI Skin(GUI皮肤)资源:可以通过定义新的GUI皮肤来产生需要的图形界面效果。

2. 外部资源创建及导入

    外部资源包括:模型和角色动作

2.1 外部模型导入方式

        1)输出插件(FBX或OBJ):仅输出需要的数据

        2)输出相应的3D应用文件(如Max或Blend,由Unity进行转换):可能输出多余的数据

2.2 角色动画导入方式

        1)导出一个模型文件:此模型文件中包含一个动画文件,此动画文件中包含多个动画片断

        2)每个动画片断导出一个模型文件:每个模型的和名称需要符合规范

2.3 材质、纹理、着色器

        1)纹理:纹理就是图片,可使用外部图形处理软件处理(通过材质的方式在视图中进行显示

        2)材质和着色器:材质相当于一个框架,而Shader(着色器)是框架中的内容,在材质框架中可以选择不同的Shader模型,来定义材质的外表。

        3)Bumped Diffuse Shader<Normalmap(法线贴图)>:在一个简单的模型上使用法线贴图,可以在一个简单的模型上产生非常真实复杂的效果,这样节省了模型量,可以极大地提高游戏运行速度。使用方法:Material的Shader 选择为Bumped Diffuse,然后增加一个Normalmap, Normalmap的Texture Type应该为:Normalmap。

        4)Bumped Specular Shader:与Bumped Diffuse Shader类似,并在其基础上添加一些高光的效果,这样就能使整个表面显得有光泽,且可产生平滑效果。

2.4 2D纹理

       通过GUI的方式来显示2D纹理:需要使用指定的Resources文件夹来保存资源,及相关函数的调用。相关代码如下所示:       

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // Resources.Load 和 Resources.LoaddAll的资源必须放在根目录下的Resources目录下  
  2.   
  3. // save the required texture  
  4. private var oneTexture:Texture2D;  
  5. private var allTexture:Object[];  
  6.   
  7. function OnGUI()  
  8. {  
  9.     print("***Enter OnGUI****");  
  10.     if(GUI.Button(Rect(0,20,100,60),"loadOneTexture"))  
  11.     {  
  12.         //print("***11****");  
  13.         if(oneTexture == null)  
  14.         {  
  15.             oneTexture = Resources.Load("oneTexture/Grass");  
  16.         }  
  17.     }  
  18.     //print("***22****");  
  19.     if(GUI.Button(Rect(0,140,100,60),"loadAllTexture"))  
  20.     {  
  21.         //print("***33****");  
  22.         if(allTexture == null)  
  23.         {  
  24.             allTexture = Resources.LoadAll("allTexture");  
  25.         }  
  26.     }  
  27.     //print("***44****");  
  28.     if(oneTexture != null)  
  29.     {  
  30.         //print("***55****");  
  31.         GUI.DrawTexture(Rect(110,20,120,120),oneTexture, ScaleMode.StretchToFill,true,0);  
  32.     }  
  33.     //print("***66****");  
  34.     if(allTexture != null)  
  35.     {  
  36.         //print("***77****");  
  37.         for(var i =0; i< allTexture.Length; i++)  
  38.         {  
  39.             GUI.DrawTexture(Rect(110+i*200,140,120,120),allTexture[i],ScaleMode.StretchToFill,true,0);  
  40.         }  
  41.     }  
  42. }  

2.5 声音文件

      在场景中播放声音,需要两个组件:

       1)音源组件(Audio Source):把它添加到发出声音的物体上

       2)监听组件(Audio Listener):把它添加到游戏的主角物体上,如Main Camera

       3)一个物体只有一个声音片断(AudioClip,它附在AudioSource上)

       可在游戏一开始时就播放声音,也可通过程序来控制声音的Play、Pause、Stop(播放附在AudioSource上的AudioClip),其参考代码如下:

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #pragma strict  
  2. @script RequireComponent(AudioSource)  
  3. function Start () {  
  4.     audio.loop = true;  
  5. }  
  6.   
  7. function OnGUI () {  
  8.     if(GUILayout.Button("Play/Resume"))  
  9.     {  
  10.         if(!audio.isPlaying)  
  11.         {  
  12.             audio.Play();  
  13.         }  
  14.     }  
  15.       
  16.     if(GUILayout.Button("Pause"))  
  17.     {  
  18.         audio.Pause();  
  19.     }  
  20.       
  21.     if(GUILayout.Button("Stop"))  
  22.     {  
  23.         audio.Stop();  
  24.     }  
  25. }  

      把此脚本添加到具有Audio Source的物体(即发声明物体)上,audio即为此Audio Source。

      4)一个物体有多个声音片断(AudioClip)

           使用PlayOneShot(function PlayOneShot (clip :AudioClip,volumeScale : float = 1.0F) : void )来播放指定的片断(AudioClip,播放在脚本中定义的AudioClip),其参考代码如下: 

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #pragma strict  
  2. @script RequireComponent(AudioSource)  
  3. var bgAudio:AudioClip;   
  4.   
  5. function Start () {  
  6.     audio.loop = true;  
  7. }  
  8.   
  9. function OnGUI () {  
  10.     if(GUILayout.Button("Play/Resume"))  
  11.     {  
  12.         if(!audio.isPlaying)  
  13.         {  
  14.             audio.Play();  
  15.         }  
  16.     }  
  17.       
  18.     if(GUILayout.Button("Pause"))  
  19.     {  
  20.         audio.Pause();  
  21.     }  
  22.       
  23.     if(GUILayout.Button("Stop"))  
  24.     {  
  25.         audio.Stop();  
  26.     }  
  27.       
  28.     if(GUILayout.Button("PlayOneShot"))  
  29.     {  
  30.         audio.PlayOneShot(bgAudio,1.0);  
  31.     }     
  32.       
  33. }  

           注:audio.Play():播放AudioSource中的AudioClip

             audio.Pause():只能暂停AudioSource中的AudioClip播放

             aduio.Stop():停止所有的声音播放

             audio.PlayOneShot(...):播放一个脚本中定义的AudioClip,可与audio.Play()同时播放

2.6 Prefab(预设/预制)

      预设也是一种资源,它具有重用和运行实例化两个重要特性。

      1)继承性:所有的实例物体都链接到原始的预设物体中,当对预设物体进行修改时,其相关的实例物体立即跟随变化,这就是实例的继承性

      2)重载:可以对单独的实例物体进行修改,这就是实例的重载


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值