unity3d-多媒体与网络
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会自动生成电影纹理
密钥:3b1z
最后生成了纹理
视频跟音乐一样,也可以通过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-多媒体与网络的更多相关文章
- Unity3d 网络编程(一)(Unity3d内建网络Network介绍)
首先个人说说题外话,Unity3d使用的网络库核心是用C++实现的一款商业网络游戏引擎库. RakNet.所以对于移动设备来说,用Unity3d来写server是全然能够的,而且内建网络库的各项功能封 ...
- Unity3D笔记二十 多媒体与网络
1 游戏音频 1.游戏音乐:如游戏背景音乐 2.游戏音效:如开枪或打怪物时“砰砰”的游戏音效 Unity 3D游戏引擎共支持4种音乐格式的文件,具体如下. aiff:适用于较短的音乐文件,可用作游戏音 ...
- Unity3d 网络编程(二)(Unity3d内建网络各项參数介绍)
这里是全部Unity3d在网络中能用到相关的类及方法.纵观參数功能, Unity3d来写一个手游是不二的选择: RPC 能够传递的參数 int float string NetworkPlayer N ...
- Unity3D编程学习分享
学习地址:http://www.ixueyun.com/lessons/detail-lessonId-692.html 一.课程概述: 以前大部分3D游戏出现在pc和ps.XBox等专业游戏主机上, ...
- Unity3D之Unity3D 4.3.0 破解方法
Dear All 破解有风险,破解不尊重知识产权,如果有涉及请删除或者联系我……以下呢 是我这几天捣鼓的4.3.0版本 供学习!请大家支持正版! 1.下载最新版本 我是在Unity官网下载的最新版本 ...
- 值得推荐的C/C++框架和库
值得推荐的C/C++框架和库 [本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 下次造轮子前先看 ...
- [转]C/C++ 程序员必须收藏的资源大全
from: https://github.com/jobbole/awesome-cpp-cn C++ 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome – XXX 系列 ...
- [转载]C/C++框架和库
C/C++框架和库 装载自:http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419 值得学习的C语言开源项目 Webbench Web ...
- Java以基础类库
Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. (一)java.lang包 Java最常用的包都属于该包, ...
- 最全面的 C++ 资源、框架大全
转载自 http://www.codeceo.com/article/cpp-resource-framework.html#0-tsina-1-99850-397232819ff9a47a7b7 ...
随机推荐
- ubuntu16.04安装 catkin_tools
参考:https://catkin-tools.readthedocs.io/en/latest/installing.html First you must have the ROS reposit ...
- CSS 小技巧
CSS 小技巧 一.边框内圆角 我们在设计例如按钮等控件的时候,会遇到这样的设计:只有内侧有圆角,而边框或者描边的四个角还是保持直角的形状,用以下代码可以轻松的实现. #wrapper { width ...
- 编译安装spark 1.5.x(Building Spark)
原文连接:http://spark.apache.org/docs/1.5.0/building-spark.html · Building with build/mvn · Building a R ...
- Mac操作的一些技能
截图功能 通常会用到以下快捷键组合: Command+Shift+3截全屏. Command+Shift+4截屏幕选定部分. Command+Shift+4+空格截取所选窗口 在终端输入如下命令,开启 ...
- iOS 模拟器运行不能联网 PAC Fetch failed with error
app在模拟器是哪个启动成功会自动连接服务器,然后Xcode控制台报错, 模拟器 PAC Fetch failed with error [NSURLErrorDomain:-1001] 这类问题有好 ...
- python 查找函数的用法
python的导入模块:python解释器先检查当前目录下的导入的模块,如果没有找到再检查sys模块中path中的变量(import sys,sys.path),如果没有找到,就会发生错误.可以使用脚 ...
- dhttp与IdCookieManager处理登陆过程
dhttp与IdCookieManager处理登陆过程 我们知道,用IE注册网页(象论坛)时,它能够自动找出相应的Cookie并提交给服务器,从而使用户不用重新登录就能够看到与他自己帐号有关的内容.这 ...
- C# decimal指定精度
最近做一个项目.遇到了decimal 如何指定精度的问题 一般的指定参数 param = new SqlParameter(ParamName, DbType); 但decimal就不能只通过构 ...
- Celery 出现Process 'Worker-5' pid:5608 exited with 'exitcode 1' 问题
起初我以为是进程PID文件问题,从新删除问题并未解决. 现已解决办法公布如下: pip install --upgrade billiard 原因:依赖的billiard库版本有点低,更新即可
- Flask需要登录权限的装饰器写法
def wapper(func): def inner(*args,**kwargs): if not request.cookies.get("username"): retur ...