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模型,来定义材质的外表。

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文件夹来保存资源,及相关函数的调用。相关代码如下所示:       

// Resources.Load 和 Resources.LoaddAll的资源必须放在根目录下的Resources目录下

// save the required texture
private var oneTexture:Texture2D;
private var allTexture:Object[];

function OnGUI()
{
	print("***Enter OnGUI****");
	if(GUI.Button(Rect(0,20,100,60),"loadOneTexture"))
	{
		//print("***11****");
		if(oneTexture == null)
		{
			oneTexture = Resources.Load("oneTexture/Grass");
		}
	}
	//print("***22****");
	if(GUI.Button(Rect(0,140,100,60),"loadAllTexture"))
	{
		//print("***33****");
		if(allTexture == null)
		{
			allTexture = Resources.LoadAll("allTexture");
		}
	}
	//print("***44****");
	if(oneTexture != null)
	{
		//print("***55****");
		GUI.DrawTexture(Rect(110,20,120,120),oneTexture, ScaleMode.StretchToFill,true,0);
	}
	//print("***66****");
	if(allTexture != null)
	{
		//print("***77****");
		for(var i =0; i< allTexture.Length; i++)
		{
			GUI.DrawTexture(Rect(110+i*200,140,120,120),allTexture[i],ScaleMode.StretchToFill,true,0);
		}
	}
}



2.5 声音文件

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

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

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

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

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

#pragma strict
@script RequireComponent(AudioSource)
function Start () {
	audio.loop = true;
}

function OnGUI () {
	if(GUILayout.Button("Play/Resume"))
	{
		if(!audio.isPlaying)
		{
			audio.Play();
		}
	}
	
	if(GUILayout.Button("Pause"))
	{
		audio.Pause();
	}
	
	if(GUILayout.Button("Stop"))
	{
		audio.Stop();
	}
}



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

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

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

#pragma strict
@script RequireComponent(AudioSource)
var bgAudio:AudioClip; 

function Start () {
	audio.loop = true;
}

function OnGUI () {
	if(GUILayout.Button("Play/Resume"))
	{
		if(!audio.isPlaying)
		{
			audio.Play();
		}
	}
	
	if(GUILayout.Button("Pause"))
	{
		audio.Pause();
	}
	
	if(GUILayout.Button("Stop"))
	{
		audio.Stop();
	}
	
	if(GUILayout.Button("PlayOneShot"))
	{
		audio.PlayOneShot(bgAudio,1.0);
	}	
	
}



         

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

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

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

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

2.6 Prefab(预设/预制)

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

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

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