如何在unity3d中选择本地文件呢,网上有介绍使用OpenFileDialog的方法来调用windows的文件选择对话框,但是要弹出windows窗口,这对于在全屏模式下选择文件来说界面就有些不太友好了。为了使用unity3中元素显示文件选择对话框,本人封装了一个dll文件可嵌入unit3d用于文件选择,界面还可以自己修改。
可以选择指定类型的文件,效果如图:
,
原理:unity3多中显示框架,在NN视频组件中显示(中间白色区域的)目录和文件列表。通过图片的方式显示出来。部分代码如下:
- 显示文件选择窗口:
if(bSelectFile)
{
fileDialog.windowDialog=GUI.Window (100,fileDialog.windowDialog, myFileWindow,"");
}
2、用图像显示目录和文件列表:
UInt32 vsize= NCGetVideo (-1, fileDialog.nvbyts, fileDialog.pvrtcBytes);
if (vsize!=0) { //有视频
UInt32 cx = vsize >> 16;
UInt32 cy = vsize & 0xffff;
if (cx * cy * 3 != fileDialog.nvbyts) { //新的大小
fileDialog.nvbyts=cx * cy * 3;
fileDialog.pvrtcBytes = new byte[fileDialog.nvbyts];
fileDialog.texture2D = new Texture2D ((int)cx,(int)cy, TextureFormat.RGB24, false);
onText("file dialog size:"+cx+":"+cy);
return;
}
fileDialog.texture2D.LoadRawTextureData (fileDialog.pvrtcBytes);
fileDialog.texture2D.Apply ();
Rect rc=fileDialog.windowDialog;
rc.x=2;
rc.y=20;
rc.width=320; //不能缩放
rc.height=400;
GUI.DrawTexture (rc, fileDialog.texture2D, ScaleMode.StretchToFill, true, 10.0f);
}
3、响应鼠标操作:当鼠标点击时获取点击的文件名称,移动时高亮显示鼠标下的文件名称
bool bMouseDown = Input.GetMouseButtonDown (0);
bool bMouseMove = Input.GetMouseButton (0);
bool bMouseUp = Input.GetMouseButtonUp (0);
float x=Input.mousePosition.x;
float y=Screen.height-Input.mousePosition.y;
if(bMouseDown)
{
filex=x;
filey=y;
nPath=NCMouseEvent(1,(Int32)x,(Int32)y,sPath);
}
else if(bMouseUp)
{
nPath=NCMouseEvent(3,(Int32)x,(Int32)y,sPath);
}
else
{
if(filex!=x||filey!=y)
{
filex=x;
filey=y;
if(bMouseMove)
NCMouseEvent(2,(Int32)x,(Int32)y,sPath);
else
NCMouseEvent(4,(Int32)x,(Int32)y,sPath);
}
}
}
if(nPath>0)
{
filePath= System.Text.Encoding.Unicode.GetString(sPath,0,nPath);
var pos=filePath.LastIndexOf("\\");
if(pos==filePath.Length-1) //目录
{
fileInput="";
}
else{
fileInput=filePath.Substring(pos+1);
filePath=filePath.Substring(0,pos+1);
}
}
}
通过以上工作原理,该组件还可以用于播放视频和开发视频聊天功能(需要先登录到NN测试服务器):
源代码下载地址:http://www.nnv1.com/VideoChat.htm
(点击里面的 ”Unity3d二次开发代码下载“) 目前只支持32位系统,请用32位unity测试哦。