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);
}
}