1、音乐

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

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

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

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

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

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

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

可以通过Play() Pause() Stop() 来控制音乐播放,暂停,停止等操作,看代码。比较简单

 using UnityEngine;
using System.Collections; /// <summary>
/// 测试播放音乐
/// </summary>
public class playAudio : MonoBehaviour
{ //音乐文件
public AudioSource music;
public AudioClip ad;
public float musicVolume;
// Use this for initialization
void Start()
{
//设置默认音量
musicVolume = 0.5f;
} // Update is called once per frame
void Update()
{ } void OnGUI()
{
//添加音乐按钮
if (GUILayout.Button("播放音乐"))
{
//AudioSource.PlayClipAtPoint(ad, transform.position); //当前是否播放音乐
if (!music.isPlaying)
{
//播放音乐
music.Play();
}
}
//关闭音乐按钮
if (GUILayout.Button("关闭音乐"))
{
if (music.isPlaying)
music.Stop();
}
//暂停音乐
if (GUILayout.Button("暂停音乐"))
{
if (music.isPlaying)
music.Pause();
} //创建一个用于动态修改音乐音量的滑动条
musicVolume = GUILayout.HorizontalSlider(musicVolume, , ,GUILayout.Width());
GUILayout.Space();
GUILayout.Label("当前音量:" + musicVolume * + "%"); //设置当前音乐的音量
if (music.isPlaying)
{
music.volume = musicVolume;
}
}
}

当然。如果你是把音乐绑定在角色上。可以直接定义一个声音片段

public AudioClip ad; 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() 来控制音乐播放,暂停,停止等操作,看演示代码

 using UnityEngine;
using System.Collections; /// <summary>
/// 测试GUI播放视频和游戏对象播放视频
/// </summary>
public class playdy : MonoBehaviour
{ //电影纹理
public MovieTexture moveTexture; // Use this for initialization
void Start()
{
//设置当前对象的主纹理为电影纹理
renderer.material.mainTexture = moveTexture;
//设置电影纹理播放模式为循环
moveTexture.loop = true; } // Update is called once per frame
void Update()
{ }
void OnGUI()
{
//GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), moveTexture); if (GUILayout.Button("播放/继续"))
{
// 播放/继续 视频
if (!moveTexture.isPlaying)
{
moveTexture.Play();
}
}
if (GUILayout.Button("暂停播放"))
{
moveTexture.Pause();
}
if (GUILayout.Button("停止播放"))
{
moveTexture.Stop();
}
}
}

当然。你也可以通过GUI绘图的方式来显示视频

GUI.DrawTexture(new Rect(, , Screen.width, Screen.height), moveTexture);

但GUI播放的效率要比在游戏对象中播放要低一些。

3、网络

unity提供了WWW下载类,它的原理是以GET请求的形式向服务器请求数据,然后等服务器返回,在向服务器请求数据时,将请求的地址传入其构造函数即可开始下载,

在下载过程中,可以使用yield()方法或者isDone()方法来判断下载是否完成。目前unity只支持PNG和JPG类型的贴图文件。如果有错误,可以Debug.Log(www.erro)调试

现在模拟WWW下载本地和网络上的图片。。本地。可以通过Application.dataPath获取游戏运行的路径,比如:

在unit3d种创建一个平面,把下载的图片用于这个平面上

 using UnityEngine;
using System.Collections; /// <summary>
/// 测试下载本地图片和网络图片
/// </summary>
public class downImg : MonoBehaviour { //本机下载的贴图
private Texture txt0;
//服务器下载贴图
private Texture txt1;
/// <summary>
/// 加载本机图片
/// </summary>
/// <returns></returns>
IEnumerator loadLocal()
{
//本机下载
if (txt0 == null)
{
//本机资源的路径
/*
* Application.dataPath:包含游戏数据文件夹的路径(只读)。Assets目录下
比如:E:/u3d/Assets/1.jpg
* 因为要是url路径,所以前面要加 file://
*/ WWW date = new WWW("file://" + Application.dataPath + "/1.jpg");
//等待下载完成
yield return date;
//得到下载的贴图
txt0 = date.texture;
}
//更换下载的图片
renderer.material.mainTexture = txt0;
} IEnumerator loadNetWork()
{
//服务器网页下载
if (txt1 == null)
{
//服务器的资源url
WWW date = new WWW("http://img0.bdstatic.com/img/image/shouye/xinshouye/qiche116.jpg");
//等待下载完成
yield return date;
//得到下载的图片
txt1 = date.texture;
}
//更换下载的图片
renderer.material.mainTexture = txt1;
} void OnGUI()
{
if (GUILayout.Button("下载本机贴图"))
{
StartCoroutine(loadLocal());
}
if (GUILayout.Button("下载服务器贴图"))
{
StartCoroutine(loadNetWork());
}
}
}

4、创建本地服务器

 using UnityEngine;
using System.Collections; /// <summary>
/// 测试服务器
/// </summary>
public class CServer : MonoBehaviour
{ //端口号
int port = ; //聊天信息
string receiveMessage = string.Empty; //滚动视图位置
Vector2 scrollPositon; //移动信息
string MoveInfo = string.Empty;
void OnGUI()
{
//网络连接状态
switch (Network.peerType)
{
//服务器未开启状态
case NetworkPeerType.Disconnected:
StartServer();
break;
//成功连接服务器
case NetworkPeerType.Server:
Server();
break;
//正在尝试连接
case NetworkPeerType.Connecting:
break;
}
}
/// <summary>
/// 创建本机服务器
/// </summary>
void StartServer()
{
if (GUILayout.Button("创建本机服务器"))
{
//开始创建服务器,运行10台主机连接
//InitializeServer(连接客户端数量,服务器端口号,是否支持Nat方式连接)
NetworkConnectionError error = Network.InitializeServer(, port, false); //如果连接失败,将错误信息打印出来
Debug.Log("连接状态:" + error);
}
}
void Server()
{
GUILayout.Label("服务器创建完毕,等待客户端连接。");
//得到客户端连接的数量
int length = Network.connections.Length;
for (int i = ; i < length; i++)
{
GUILayout.Label("连接服务器客户端ID:" + i);
GUILayout.Label("连接客户端IP:" + Network.connections[i].ipAddress);
GUILayout.Label("连接服务器客户端端口号:" + Network.connections[i].port);
GUILayout.Label("-------------华丽的分割线-------------------");
}
//断开服务器
if (GUILayout.Button("断开服务器"))
{
Network.Disconnect();
receiveMessage = string.Empty;
MoveInfo = string.Empty;
} //创建一个滚动视图,用来显示聊天信息
scrollPositon = GUILayout.BeginScrollView(scrollPositon, GUILayout.Width(), GUILayout.Height());
//显示聊天信息
GUILayout.Box(receiveMessage);
//显示玩家移动信息
GUILayout.Box(MoveInfo);
GUILayout.EndScrollView();
} /// <summary>
/// 接收信息
/// </summary>
/// <param name="message">消息</param>
/// <param name="info">消息附带信息</param>
[RPC] //标识,说明是接收信息 C#中必须这样
void RequestMessage(string message, NetworkMessageInfo info)
{
receiveMessage += string.Format("\n发送者{0}:{1}", info.sender, message);
} /// <summary>
/// 接收模型移动信息
/// </summary>
/// <param name="message"></param>
/// <param name="info"></param>
[RPC]
void RequestMove(string message, NetworkMessageInfo info)
{
MoveInfo += string.Format("\n移动者{0}:执行了{1}", info.sender, message);
}
}

unity3d-多媒体与网络的更多相关文章

  1. Unity3d 网络编程(一)(Unity3d内建网络Network介绍)

    首先个人说说题外话,Unity3d使用的网络库核心是用C++实现的一款商业网络游戏引擎库. RakNet.所以对于移动设备来说,用Unity3d来写server是全然能够的,而且内建网络库的各项功能封 ...

  2. Unity3D笔记二十 多媒体与网络

    1 游戏音频 1.游戏音乐:如游戏背景音乐 2.游戏音效:如开枪或打怪物时“砰砰”的游戏音效 Unity 3D游戏引擎共支持4种音乐格式的文件,具体如下. aiff:适用于较短的音乐文件,可用作游戏音 ...

  3. Unity3d 网络编程(二)(Unity3d内建网络各项參数介绍)

    这里是全部Unity3d在网络中能用到相关的类及方法.纵观參数功能, Unity3d来写一个手游是不二的选择: RPC 能够传递的參数 int float string NetworkPlayer N ...

  4. Unity3D编程学习分享

    学习地址:http://www.ixueyun.com/lessons/detail-lessonId-692.html 一.课程概述: 以前大部分3D游戏出现在pc和ps.XBox等专业游戏主机上, ...

  5. Unity3D之Unity3D 4.3.0 破解方法

    Dear  All 破解有风险,破解不尊重知识产权,如果有涉及请删除或者联系我……以下呢 是我这几天捣鼓的4.3.0版本 供学习!请大家支持正版! 1.下载最新版本 我是在Unity官网下载的最新版本 ...

  6. 值得推荐的C/C++框架和库

    值得推荐的C/C++框架和库 [本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 下次造轮子前先看 ...

  7. [转]C/C++ 程序员必须收藏的资源大全

    from: https://github.com/jobbole/awesome-cpp-cn C++ 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome – XXX 系列 ...

  8. [转载]C/C++框架和库

    C/C++框架和库 装载自:http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419 值得学习的C语言开源项目 Webbench Web ...

  9. Java以基础类库

    Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. (一)java.lang包 Java最常用的包都属于该包, ...

  10. 最全面的 C++ 资源、框架大全

    转载自   http://www.codeceo.com/article/cpp-resource-framework.html#0-tsina-1-99850-397232819ff9a47a7b7 ...

随机推荐

  1. 初试 Entity Framework Core 的多对多映射

    今天在博问中看到一个关于 EF Core 的提问 ef core 2.0 多对多查询的问题,由于还没使用过 EF Core 的多对多映射,于是参考 EF Core 帮助文档快速写了个 .net cor ...

  2. 20165311 实验一 Java开发环境的熟悉

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:李嘉昕 学号:20165311 指导教师:娄嘉鹏 实验日期:2018年4月2日 实验时间:13:45 - 15:25 实验序号:3 实 ...

  3. Codeforces 670E - Correct Bracket Sequence Editor - [线段树]

    题目链接:https://codeforces.com/contest/670/problem/E 题意: 给出一个已经匹配的括号串,给出起始的光标位置(光标总是指向某个括号). 有如下操作: 1.往 ...

  4. centos7安装zabbix3.4

    一.系统环境 关闭防火墙及selinux systemctl stop firewalld.service systemctl disable firewalld.service sed -i 's/ ...

  5. malloc函数 链表

    https://baike.baidu.com/item/malloc函数 malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void ...

  6. Uniform Resource Name Server

    HTTP The Definitive Guide 按址标识 identify by address 按名标识 identify by name Domain Name Server Uniform ...

  7. LeetCode 589 N-ary Tree Preorder Traversal 解题报告

    题目要求 Given an n-ary tree, return the preorder traversal of its nodes' values. 题目分析及思路 题目给出一棵N叉树,要求返回 ...

  8. 【python基础】sys

    sys模块 参考: https://blog.csdn.net/qq_38526635/article/details/81739321 http://www.cnblogs.com/cherishr ...

  9. 20170728 Celery项目 后台处理SQL SERVER的一个异常

    -- 1. 感觉是访问DB 失败了,失败原因不明确 -- 2. 考虑解决问题的解决办法,后台记录异常,并重新发送任务. 具体如何来实现

  10. v-show 和 v-if 对 v-chart的影响

    借鉴:https://blog.csdn.net/xiaxiangyun/article/details/78909991 使用v-show控制tab切换 其中一个tab数据请求后显示第二个tab,第 ...