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 }
  • 相关阅读:
    P站画师 GTZ taejune 精选4k插画壁纸
    点、向量与坐标系
    一些几何
    画直线算法 Line drawing algorithm
    DX11 学习大纲
    插值 Interpolation
    The History of Computer Graphics
    vue中的请求拦截响应
    Event loop
    小程序使用wx.navigateTo()跳转失败
  • 原文地址:https://www.cnblogs.com/nsky/p/4451318.html
Copyright © 2011-2022 走看看