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(预设/预制)
预设也是一种资源,它具有重用和运行实例化两个重要特性。
继承性:所有的实例物体都链接到原始的预设物体中,当对预设物体进行修改时,其相关的实例物体立即跟随变化,这就是实例的继承性
重载:可以对单独的实例物体进行修改,这就是实例的重载