unity3d-多媒体与网络

1、音乐

unity3d 共支持4种音乐的格式文件

aiff:适用于较短的音乐文件,可用于游戏音效

wav:适用于较短的音乐文件,可用于游戏音效

mp3:适用于较长的音乐文件,可用于游戏音乐

ogg:适用于较长的音乐文件,可用于游戏音乐

 播放音乐要使用音乐源组件:AudioSource,

创建一个空对象,并添加AudioSource组件(GameObject ---> Audio ---> AudioSource)

 unity3d-多媒体与网络

可以通过Play() Pause() Stop() 来控制音乐播放,暂停,停止等操作,看代码。比较简单

 1 using UnityEngine;

 2 using System.Collections;

 3 

 4 /// <summary>

 5 /// 测试播放音乐

 6 /// </summary>

 7 public class playAudio : MonoBehaviour

 8 {

 9 

10     //音乐文件

11     public AudioSource music;

12     public AudioClip ad;

13     public float musicVolume;

14     // Use this for initialization

15     void Start()

16     {

17         //设置默认音量

18         musicVolume = 0.5f;

19     }

20 

21     // Update is called once per frame

22     void Update()

23     {

24 

25     }

26 

27     void OnGUI()

28     {

29         //添加音乐按钮

30         if (GUILayout.Button("播放音乐"))

31         {

32             //AudioSource.PlayClipAtPoint(ad, transform.position);

33             

34             //当前是否播放音乐

35             if (!music.isPlaying)

36             {

37                 //播放音乐

38                 music.Play();

39             }

40         }

41         //关闭音乐按钮

42         if (GUILayout.Button("关闭音乐"))

43         {

44             if (music.isPlaying)

45                 music.Stop();

46         }

47         //暂停音乐

48         if (GUILayout.Button("暂停音乐"))

49         {

50             if (music.isPlaying)

51                 music.Pause();

52         }

53 

54         //创建一个用于动态修改音乐音量的滑动条

55         musicVolume = GUILayout.HorizontalSlider(musicVolume, 0, 1,GUILayout.Width(100));

56         GUILayout.Space(5);

57         GUILayout.Label("当前音量:" + musicVolume * 100 + "%");

58 

59         //设置当前音乐的音量

60         if (music.isPlaying)

61         {

62             music.volume = musicVolume;

63         }

64     }

65 }

 

当然。如果你是把音乐绑定在角色上。可以直接定义一个声音片段

 1 public AudioClip ad; 2 AudioSource.PlayClipAtPoint(ad, transform.position); :AudioClip,

通过AudioSource.PlayClipAtPoint(ad, transform.position);播放

 

2、视频

在unity3d中。需要使用电影纹理 MoveTexture来添加游戏视频,unity支持的视频格式为:.mov、.mpg、.mepg、.mp4、.avi、.asf

 把视频拖拽到unit3d中。如果你发现报错

unity3d-多媒体与网络

 

因为你没有安装:QuickTime Player。安装后。重启unity3d.。重新拖拽视频。uniyt3d会自动生成电影纹理

 

 

QuickTime下载:

最后生成了纹理

unity3d-多媒体与网络

 

 

视频跟音乐一样,也可以通过Play() Pause() Stop() 来控制音乐播放,暂停,停止等操作,看演示代码

 

 1 using UnityEngine;

 2 using System.Collections;

 3 

 4 /// <summary>

 5 /// 测试GUI播放视频和游戏对象播放视频

 6 /// </summary>

 7 public class playdy : MonoBehaviour

 8 {

 9 

10     //电影纹理

11     public MovieTexture moveTexture;

12 

13     // Use this for initialization

14     void Start()

15     {

16         //设置当前对象的主纹理为电影纹理

17         renderer.material.mainTexture = moveTexture;

18         //设置电影纹理播放模式为循环

19         moveTexture.loop = true;

20 

21     }

22 

23     // Update is called once per frame

24     void Update()

25     {

26 

27     }

28     void OnGUI()

29     {

30         //GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), moveTexture);

31 

32         if (GUILayout.Button("播放/继续"))

33         {

34             // 播放/继续 视频

35             if (!moveTexture.isPlaying)

36             {

37                 moveTexture.Play();

38             }

39         }

40         if (GUILayout.Button("暂停播放"))

41         {

42             moveTexture.Pause();

43         }

44         if (GUILayout.Button("停止播放"))

45         {

46             moveTexture.Stop();

47         }

48     }

49 }

 当然。你也可以通过GUI绘图的方式来显示视频

 1 GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), moveTexture); 

但GUI播放的效率要比在游戏对象中播放要低一些。

 

 

3、网络

unity提供了WWW下载类,它的原理是以GET请求的形式向服务器请求数据,然后等服务器返回,在向服务器请求数据时,将请求的地址传入其构造函数即可开始下载,

在下载过程中,可以使用yield()方法或者isDone()方法来判断下载是否完成。目前unity只支持PNG和JPG类型的贴图文件。如果有错误,可以Debug.Log(www.erro)调试

现在模拟WWW下载本地和网络上的图片。。本地。可以通过Application.dataPath获取游戏运行的路径,比如:

在unit3d种创建一个平面,把下载的图片用于这个平面上

 1 using UnityEngine;

 2 using System.Collections;

 3 

 4 /// <summary>

 5 /// 测试下载本地图片和网络图片

 6 /// </summary>

 7 public class downImg : MonoBehaviour {

 8 

 9     //本机下载的贴图

10     private Texture txt0;

11     //服务器下载贴图

12     private Texture txt1;

13     /// <summary>

14     /// 加载本机图片

15     /// </summary>

16     /// <returns></returns>

17     IEnumerator loadLocal()

18     {

19         //本机下载

20         if (txt0 == null)

21         {

22             //本机资源的路径

23             /*

24              * Application.dataPath:包含游戏数据文件夹的路径(只读)。Assets目录下

25               比如:E:/u3d/Assets/1.jpg

26              * 因为要是url路径,所以前面要加  file://

27              */

28 

29             WWW date = new WWW("file://" + Application.dataPath + "/1.jpg");

30             //等待下载完成

31             yield return date;

32             //得到下载的贴图

33             txt0 = date.texture;

34         }

35         //更换下载的图片

36         renderer.material.mainTexture = txt0;

37     }

38 

39     IEnumerator loadNetWork()

40     {

41         //服务器网页下载

42         if (txt1 == null)

43         {

44             //服务器的资源url

45             WWW date = new WWW("http://img0.bdstatic.com/img/image/shouye/xinshouye/qiche116.jpg");

46             //等待下载完成

47             yield return date;

48             //得到下载的图片

49             txt1 = date.texture;

50         }

51         //更换下载的图片

52         renderer.material.mainTexture = txt1;

53     }

54 

55     void OnGUI()

56     {

57         if (GUILayout.Button("下载本机贴图"))

58         {

59             StartCoroutine(loadLocal());

60         }

61         if (GUILayout.Button("下载服务器贴图"))

62         {

63             StartCoroutine(loadNetWork());

64         }

65     }

66 }

 

 

 

 

4、创建本地服务器

  1 using UnityEngine;

  2 using System.Collections;

  3 

  4 /// <summary>

  5 /// 测试服务器

  6 /// </summary>

  7 public class CServer : MonoBehaviour

  8 {

  9 

 10     //端口号

 11     int port = 10000;

 12 

 13     //聊天信息

 14     string receiveMessage = string.Empty;

 15 

 16     //滚动视图位置

 17     Vector2 scrollPositon;

 18 

 19     //移动信息

 20     string MoveInfo = string.Empty;

 21     void OnGUI()

 22     {

 23         //网络连接状态

 24         switch (Network.peerType)

 25         {

 26             //服务器未开启状态

 27             case NetworkPeerType.Disconnected:

 28                 StartServer();

 29                 break;

 30             //成功连接服务器

 31             case NetworkPeerType.Server:

 32                 Server();

 33                 break;

 34             //正在尝试连接

 35             case NetworkPeerType.Connecting:

 36                 break;

 37         }

 38     }

 39     /// <summary>

 40     /// 创建本机服务器

 41     /// </summary>

 42     void StartServer()

 43     {

 44         if (GUILayout.Button("创建本机服务器"))

 45         {

 46             //开始创建服务器,运行10台主机连接

 47             //InitializeServer(连接客户端数量,服务器端口号,是否支持Nat方式连接)

 48             NetworkConnectionError error = Network.InitializeServer(10, port, false);

 49 

 50             //如果连接失败,将错误信息打印出来

 51             Debug.Log("连接状态:" + error);

 52         }

 53     }

 54     void Server()

 55     {

 56         GUILayout.Label("服务器创建完毕,等待客户端连接。");

 57         //得到客户端连接的数量

 58         int length = Network.connections.Length;

 59         for (int i = 0; i < length; i++)

 60         {

 61             GUILayout.Label("连接服务器客户端ID:" + i);

 62             GUILayout.Label("连接客户端IP:" + Network.connections[i].ipAddress);

 63             GUILayout.Label("连接服务器客户端端口号:" + Network.connections[i].port);

 64             GUILayout.Label("-------------华丽的分割线-------------------");

 65         }

 66         //断开服务器

 67         if (GUILayout.Button("断开服务器"))

 68         {

 69             Network.Disconnect();

 70             receiveMessage = string.Empty;

 71             MoveInfo = string.Empty;

 72         }

 73 

 74         //创建一个滚动视图,用来显示聊天信息

 75         scrollPositon = GUILayout.BeginScrollView(scrollPositon, GUILayout.Width(200), GUILayout.Height(300));

 76         //显示聊天信息

 77         GUILayout.Box(receiveMessage);

 78         //显示玩家移动信息

 79         GUILayout.Box(MoveInfo);

 80         GUILayout.EndScrollView();

 81     }

 82 

 83     /// <summary>

 84     /// 接收信息

 85     /// </summary>

 86     /// <param name="message">消息</param>

 87     /// <param name="info">消息附带信息</param>

 88     [RPC] //标识,说明是接收信息  C#中必须这样

 89     void RequestMessage(string message, NetworkMessageInfo info)

 90     {

 91         receiveMessage += string.Format("\n发送者{0}:{1}", info.sender, message);

 92     }

 93 

 94     /// <summary>

 95     /// 接收模型移动信息

 96     /// </summary>

 97     /// <param name="message"></param>

 98     /// <param name="info"></param>

 99     [RPC]

100     void RequestMove(string message, NetworkMessageInfo info)

101     {

102         MoveInfo += string.Format("\n移动者{0}:执行了{1}", info.sender, message);

103     }

104 }

 

你可能感兴趣的:(unity3d)