热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

unity3d多媒体与网络

1、音乐unity3d共支持4种音乐的格式文件aiff:适用于较短的音乐文件,可用于游戏音效wav:适用于较短的音乐文件,可用于游戏音效mp3:适用于较长的音乐文件,可用于游戏音乐

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 /// 
 5 /// 测试播放音乐
 6 /// 
 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下载:

http://pan.baidu.com/s/1i3vKdvB 密钥:3b1z

最后生成了纹理

unity3d-多媒体与网络

 

 

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

 

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 /// 
 5 /// 测试GUI播放视频和游戏对象播放视频
 6 /// 
 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 /// 
 5 /// 测试下载本地图片和网络图片
 6 /// 
 7 public class downImg : MonoBehaviour {
 8 
 9     //本机下载的贴图
10     private Texture txt0;
11     //服务器下载贴图
12     private Texture txt1;
13     /// 
14     /// 加载本机图片
15     /// 
16     /// 
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 /// 
  5 /// 测试服务器
  6 /// 
  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     /// 
 40     /// 创建本机服务器
 41     /// 
 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 )
 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     /// 
 84     /// 接收信息
 85     /// 
 86     /// 消息
 87     /// 消息附带信息
 88     [RPC] //标识,说明是接收信息  C#中必须这样
 89     void RequestMessage(string message, NetworkMessageInfo info)
 90     {
 91         receiveMessage += string.Format("\n发送者{0}:{1}", info.sender, message);
 92     }
 93 
 94     /// 
 95     /// 接收模型移动信息
 96     /// 
 97     /// 
 98     /// 
 99     [RPC]
100     void RequestMove(string message, NetworkMessageInfo info)
101     {
102         MoveInfo += string.Format("\n移动者{0}:执行了{1}", info.sender, message);
103     }
104 }

 


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
author-avatar
双子宝贝鱼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有