unity3d-多媒体与网络

1、音乐

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

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

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

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

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

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

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

 

可以通过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中。如果你发现报错

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

QuickTime下载:

最后生成了纹理

视频跟音乐一样,也可以通过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("
发送者{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("
移动者{0}:执行了{1}", info.sender, message);
103     }
104 }
原文地址:https://www.cnblogs.com/nsky/p/4451318.html