zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Atitit s2018.6 s6 doc list on com pc.docx Atitit s2018.6 s6 doc list on com pc.docx  Aitit algo fix 算法系列补充.docx Atiitt 兼容性提示的艺术 attilax总结.docx Atitit 应用程序容器化总结 v2 s66.docx Atitit file cms api
    Atitit s2018.5 s5 doc list on com pc.docx  v2
    Atitit s2018.5 s5 doc list on com pc.docx  Acc 112237553.docx Acc baidu netdisk.docx Acc csdn 18821766710 attilax main num.docx Atiitt put post 工具 开发工具dev tool test.docx Atiitt 腾讯图像分类相册管家.docx
    Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx s2018 s4 doc compc dtS44 s2018 s4 doc dvcCompc dtS420 s2018 s4f doc homepc s2018 s4 doc compc dtS44(5 封私信 _ 44 条消息)WebSocket 有没有可能取代 AJAX
    Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCompc dtS312 s2018 s3f doc compcAtitit PathUtil 工具新特性新版本 v8 s312.docx s2018 s3f doc compcAtitit 操作日
    Atitit s2018.2 s2 doc list on home ntpc.docx  Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx Atiitt 手写文字识别 讯飞科大 语音云.docx Atitit 代码托管与虚拟主机.docx Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx Atitit 几大研发体系对比 Stage-Gat
    Atitit 文员招募规范 attilax总结
    Atitit r2017 r6 doc list on home ntpc.docx
    atitit r9 doc on home ntpc .docx
    Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 v4
  • 原文地址:https://www.cnblogs.com/nsky/p/4451318.html
Copyright © 2011-2022 走看看