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 ...
随机推荐
- {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作
MySQL的库.表的详细操作 MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf ...
- innodb表锁情况
MySQL InnoDB默认行级锁.行级锁都是基于索引的 行级锁变为表级锁情况如下: 1.如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住. 2.表字段进行变更. 3.进行整表 ...
- Flink – CEP NFA
看看Flink cep如何将pattern转换为NFA? 当来了一条event,如果在NFA中执行的? 前面的链路,CEP –> PatternStream –> select –> ...
- Delphi IdHTTP 设置cookie 和访问后读取Cookie 值
procedure TForm1.btn1Click(Sender: TObject); var IdHTTP: TIdHTTP; mstrCookie: string; Cookies ...
- 转:servlet的url-pattern匹配规则详细描述
原文地址:servlet的url-pattern匹配规则详细描述 原文写的很详细 另外可以参考一下:Web.xml中设置Servlet和Filter时的url-pattern匹配规则 一.概述 在 ...
- 《linux 用户管理》- useradd/userdel/usermod/groupadd/who/w
一:概念 在 Linux 中,使用一个 32位整数 来记录每一个用户(USER ID 简单 UID),这意味着在 Linux 中,可以有 40亿 个不同的用户. 系统. 在 /etc/passwd ...
- router 设置时 模板的新引法
{ path: '/Index1', name: 'Index', component: () => import ('@/components/Index.vue') },
- Jenkins tomcat打包启动脚本,待完善
shell脚本 #!/bin/bashJENKINS_HOME=/usr/local/jenkinsTOMCAT_HOME=/usr/local/jenkins/tomcat-testSHUTDOWN ...
- vue监听路由的变化,跳转到同一个页面时,Url改变但视图未重新加载问题
引入:https://q.cnblogs.com/q/88214/ 解决方法: 添加路由监听,路由改变时执行监听方法 methods:{ fetchData(){ console.log('路由发送变 ...
- systemctl介绍
声明:本文转载自:systemd (中文简体) systemd 是 Linux 下的一款系统和服务管理器,兼容 SysV 和 LSB 的启动脚本.systemd 的特性有:支持并行化任务:同一时候採用 ...