2013-12-20 15:51:59 wd791223 阅读数 9254
  • 全面认识Unity声音系统

    做游戏,怎么少得了声音!背景音乐、各种音效,都是游戏中必不可少的功能。只会简单的调用播放暂停怎么能满足我们的需求呢?声音的文件格式你知道多少,加载方式和压缩方式又了解多少呢?混音区域和音频过滤会用吗?本系列课程带你全面认识声音系统。Unity为我们提供了强大的声音编辑功能,自由制作声音混合线路,AudioMixer混音器get起来!还在等什么,快点来学习吧!

    916 人正在学习 去看看 张增会

Unity3d以场景为单位,UI场景之间的背景音乐要一直播放,而场景切换之间的loading界面,需要在前一个场景执行某个按键进行击发,并在下个场景开始的时候消失。

虽然二者同时公共的需求,但具体还是有所不同的。

一,如何设置背景音乐

1.新建空的游戏物件GlobalUIMusic,添加其tag为 GlobalUIMusic,并增加AudioSource组件,并设置睡醒就播放,并且是循环的。

(注意,物件位置的设定一定是尽量靠近场景的摄像机,摄像机默认有Audio Listener可以监听到声音)

2.绑定脚本:设置该物件加载时不销毁属性。在脚本的Awake()方法中直接调用DontDestroyOnLoad(this.gameObject);就OK。

3.将该物件生成预制体GlobalUIMusicPre(拖拽的时候,一定保证物件是激活状态,或者生成预制体后将预制体设置成激活状态)。该预制体一定放在Assets下的公共位置,每个场景都可以拖拽的。

4.可以干掉GlobalUIMusic了。

5.增加音乐控制脚本:这个是用绑定到每个场景的某个物件上的,一般是绑定在摄像机上。

每个场景有自己的背景音乐局部物件,一定要判断游戏中是否已经存在GlobalUIMusic,如果不存在,再生成新的GlobalUIMusic。否则就会出现每跳转一次场景,就会生成一个GlobalUIMusic,场景就会成为交响乐演奏会了!

 

二,设置加载界面。

1 - 4.创建物件GlobalLoading及其预制体步骤同上。

5.将要绑定给场景摄像机的控制加载的脚本如下,略有不同

 

基本上这样就可以满足需求了。

我写得比较粗糙,欢迎指正!

2015-06-12 08:54:23 leoleocs 阅读数 4072
  • 全面认识Unity声音系统

    做游戏,怎么少得了声音!背景音乐、各种音效,都是游戏中必不可少的功能。只会简单的调用播放暂停怎么能满足我们的需求呢?声音的文件格式你知道多少,加载方式和压缩方式又了解多少呢?混音区域和音频过滤会用吗?本系列课程带你全面认识声音系统。Unity为我们提供了强大的声音编辑功能,自由制作声音混合线路,AudioMixer混音器get起来!还在等什么,快点来学习吧!

    916 人正在学习 去看看 张增会

我们知道,Unity3d会将Assets folder下的图片进行编译预处理,在程序打包完成后,我们是无法动态的修改图片内容,所以,如果能动态的从非Assets 目录下加载图片就是一个非常好的方法。

我们可以使用Unity3d WWW类提供的方法来完成这个工作,WWW类经常是用来下载网络服务器上的资源,其实它也可以加载本地的资源。 参考http://docs.unity3d.com/ScriptReference/WWW.html

那具体如何实现呢, 大体分成下面几步:

  • 创建WWW类,主要参数,www = new WWW(“file://” + path)) ,其中path为图片路径的存放位置。
  • 调用WWW类的方法完成加载。参考下面的示例代码:
 // PNG file, 注意图片的大小一定要是2的n次幂,尽量往大的用。
 texture = new Texture2D(1024, 512, TextureFormat.ARGB32, true, true) 
    {
         //下面是图片的一些具体参数
        filterMode = FilterMode.Trilinear,
         wrapMode = TextureWrapMode.Clamp,
         anisoLevel = 1
     };

     www.LoadImageIntoTexture(texture);

现在Unity3d动态加载只支持PNG或是JPG格式,具体参考文档http://docs.unity3d.com/ScriptReference/WWW.LoadImageIntoTexture.html

2014-11-18 13:49:59 driaven 阅读数 4408
  • 全面认识Unity声音系统

    做游戏,怎么少得了声音!背景音乐、各种音效,都是游戏中必不可少的功能。只会简单的调用播放暂停怎么能满足我们的需求呢?声音的文件格式你知道多少,加载方式和压缩方式又了解多少呢?混音区域和音频过滤会用吗?本系列课程带你全面认识声音系统。Unity为我们提供了强大的声音编辑功能,自由制作声音混合线路,AudioMixer混音器get起来!还在等什么,快点来学习吧!

    916 人正在学习 去看看 张增会
   Unity3D学习
先来介绍一下音频
游戏音频分为背景音乐与环境音乐两种。
Audio   Clip(音频剪辑)有四种音乐格式。
MP3:适合较长音频,作为背景音乐。
Ogg:适合较长音频,作为背景音乐。
Wav:适合较短音频,作为环境音乐。
Aiff:适合较短音频,作为环境音乐。
在主摄像机 属性中单击Add Component 选择Audio 组件单击在选择Audio Source组件。这样声源组件就添加到了主摄像机中了


介绍一下Audio Source(声源组件)



Audio Reverb Zone(混合器组件)介绍



            再添加音乐之前我们先把准备做好。在对象栏的Assets文件夹中创单击Create选择Folder单击就创建出新文件了,然后你可以按F2来给新文件夹改名,也可以单击他直接改名叫Sound(声音)。你可以把你电脑的声音文件直接拖进Sound文件夹里。我们再把suonds里的声音添加到Audio Clip里面,在添加循环Loop就完成了。
          当然背景音乐,你可以添加到主摄像机上,在添加循环就好了。



            相关学习请到http://www.gopedu.com/

2016-04-05 16:54:08 wuyt2008 阅读数 6502
  • 全面认识Unity声音系统

    做游戏,怎么少得了声音!背景音乐、各种音效,都是游戏中必不可少的功能。只会简单的调用播放暂停怎么能满足我们的需求呢?声音的文件格式你知道多少,加载方式和压缩方式又了解多少呢?混音区域和音频过滤会用吗?本系列课程带你全面认识声音系统。Unity为我们提供了强大的声音编辑功能,自由制作声音混合线路,AudioMixer混音器get起来!还在等什么,快点来学习吧!

    916 人正在学习 去看看 张增会

在unity3d里显示圆形的背景。有两种方式,一种是在GUI上显示,通常是用在UI上。另外一种是通过3D的Plane显示,这种时候用在游戏场景里,例如做游戏的小地图。然后,ngui的方式也比较简单。

1、GUI显示


添加背景图片,添加连个图片,分别是透明背景,黑色圆形和黑色五角,png图片。



添加panel,在panel下再添加一个image



把图片背景添加到image上



为panel添加一个mask组件



把圆形添加到panel上



这个时候,就能看见一个圆形的背景图了。



如果把五角形添加在panel上,看到的就是五角形的背景。



2、plane方法

这种方法适合用来做小地图。


首先添加一个Shader



改个名字



双击以后编辑内容

Shader "Custom/Mask"
{
	Properties
	{
		_MainTex("Main Texture",2D)="white"{}
		_Mask("Mask Texture",2D)="white"{}
	}
	SubShader
	{
		Lighting On
		Zwrite Off
		Blend SrcAlpha OneMinusSrcAlpha
		 Pass {
		SetTexture [_Mask] {combine texture}
		SetTexture [_MainTex] {combine texture,previous}
		}
	}
}

在ps里面做一个黑底,白圆。存为tga格式



找到导入的tga文件



重新设置属性如下


在场景里添加一个Plane,并把背景拖到plane上



选中生成的材质



将Shader属性改为Custom/Mask



设置Mask Texture属性为 Mask,这个时候在编辑器里就变成圆的了。



需要把摄像机的Clear Flages属性设置为Depth only



运行预览,就能看见圆的背景了。使用的时候,需要双摄像机,一个显示背景,一个显示内容。



3、ngui显示

在ngui里面,也比较简单

首先添加一个panel,设置为Texture Mask,然后把圆形的png图片拖进去



在panel下添加一个ngui对象,我添了一个2d sprite,把背景图片拖进去



运行,ok。ngui果然好用啊


2016-01-06 14:41:14 honey199396 阅读数 3366
  • 全面认识Unity声音系统

    做游戏,怎么少得了声音!背景音乐、各种音效,都是游戏中必不可少的功能。只会简单的调用播放暂停怎么能满足我们的需求呢?声音的文件格式你知道多少,加载方式和压缩方式又了解多少呢?混音区域和音频过滤会用吗?本系列课程带你全面认识声音系统。Unity为我们提供了强大的声音编辑功能,自由制作声音混合线路,AudioMixer混音器get起来!还在等什么,快点来学习吧!

    916 人正在学习 去看看 张增会

1.       在Hierarchy窗口建一个新的摄像机,命名为Bg Camera

2.       新建空游戏体,命名为Background Image,并添加GUI Texture组件


3.       Background ImageInspector面板中点击Layer下拉窗口,选择“Add Layer

4.       在打开的面板中的 User Layer 8(如果你之前没有创建的话默认可以使用的第一个就是它!),添加一个新的层名称为“Background Image


5.       Hierachy面板中选择Background Image,并将你准备的背景图片添加给它,在Pixel Inset面板中设定XYWidthHeight值,使其可以适当的填充界面。 这里我们在代码中设置他的值。


6.       现在将该GameObjectLayer值设置为之前你添加的Background Image

7.       现在在Hierarchy面板中选择Bg Camera,并在Inspector面板中做如下的调整:

A.      取消选择除GUILayer以外的 Flare LayerAudio Listener

B.      Clear Flags设置为Solid Color

C.      设置Depth的值为-2,如果你将主摄像机的Depth设置为-1的话,这里设置的数字比主摄像机的数字小。

D.      设置Culling Mask,第一步选Nothing然后选择Background Image,最终设置好的情况如下:

8.       现在选择另外一个Camera(默认是Main Camera),在Inspector面板中进行如下设置:

A.      Clear Flags设置为“Depth Only

B.      设置Culling Mask,取消选择“Background Image”,这将会导致Culling Mask的选项显示为Mixed…

这将形成GUI TextureBg Camera来进行渲染,其他都由Main Camera进行渲染,且对于其他Camera(例如:其他Camera角度)你想要使用的,只要重复以上两上步骤就可以了!

9.       复制BackGround Image两份,此时有三个background image游戏体。将其关联到background脚本中。



10. 程序部分:

   using UnityEngine;
using System.Collections;

public class Background : MonoBehaviour {

    [SerializeField]
    private Transform background1;

    [SerializeField]
    private Transform background2;

    [SerializeField]
    private Transform background3;

    private GUITexture texture1;
    private GUITexture texture2;
    private GUITexture texture3;

    private Vector3 leftPos = new Vector3 (-1, 0, 0);
    private Vector3 rightPos = new Vector3 (1, 0, 0);

    private float damp = 0.02f;
    void Start () {
        texture1 = background1.GetComponent<GUITexture> ();
        texture2 = background2.GetComponent<GUITexture> ();
        texture3 = background3.GetComponent<GUITexture> ();


        float width = Screen.width;
        float height = Screen.height;
        texture1.pixelInset = new Rect (width / 2, height / 2, 0, 0);
        texture2.pixelInset = new Rect (width / 2, height / 2, 0, 0);
        texture3.pixelInset = new Rect (width / 2, height / 2, 0, 0);

        background1.position = Vector3.zero;
        background2.position = rightPos;
        background3.position = new Vector3 (2, 0, 0);
    }
    
    // Update is called once per frame
    void Update () {
        background1.position -= new Vector3 (1f, 0, 0) * Time.deltaTime * damp;
        background2.position -= new Vector3 (1f, 0, 0) * Time.deltaTime * damp;
        background3.position -= new Vector3 (1f, 0, 0) * Time.deltaTime * damp;

        if (background1.position.x <= leftPos.x) {
            background1.position = rightPos + background3.position;
        }
        if (background2.position.x < leftPos.x) {
            background2.position = rightPos + background1.position;
        }
        if (background3.position.x < leftPos.x) {
            background3.position = rightPos + background2.position;
        }
    }
}

此时背景就很好的运行起来了,无缝衔接,就像一张背景图一样。



--Rocky





【Unity3D】BGM

阅读数 1618

没有更多推荐了,返回首页