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会自动生成电影纹理
http://pan.baidu.com/s/1i3vKdvB 密钥:3b1z
最后生成了纹理
视频跟音乐一样,也可以通过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 }