Unity3D研究院之Unity中连接本地或局域网MySQL数据库
来源:互联网 发布:测试udp端口工具 编辑:程序博客网 时间:2024/06/05 17:24
</div><!-- /Block user information module HEADER --><ul class="p_pop nav_pop" id="umnav_menu" style="display: none;"> <li><a href="http://www.manew.com/forum.php?mod=guide&view=my" _style="background-image:url(http://www.manew.com/static/image/feed/thread_b.png) !important">帖子</a></li> <li><a href="http://www.manew.com/home.php?mod=space&do=favorite&view=me" _style="background-image:url(http://www.manew.com/static/image/feed/favorite_b.png) !important">收藏</a></li> <li><a href="http://www.manew.com/home.php?mod=magic" _style="background-image:url(http://www.manew.com/static/image/feed/magic_b.png) !important">道具</a></li> <li><a href="http://www.manew.com/home.php?mod=medal" _style="background-image:url(http://www.manew.com/static/image/feed/medal_b.png) !important">勋章</a></li> <li><a href="http://www.manew.com/home.php?mod=task" _style="background-image:url(http://www.manew.com/static/image/feed/task_b.png) !important">任务</a></li> <li><a href="http://www.manew.com/forum.php?mod=collection&op=my" _style="background-image:url(http://www.manew.com/static/image/feed/collection_b.png) !important">淘帖</a></li> <li><a href="misc.php?mod=ranklist" _style="background-image:url(http://www.manew.com/static/image/feed/ranklist_b.png) !important">排行榜</a></li> <li><a href="http://www.manew.com/home.php?mod=spacecp" rel="nofollow">设置</a></li> <li><a href="member.php?mod=logging&action=logout&formhash=a237ee7e" rel="nofollow">退出</a></li></ul><div class="header_user" style="float: right;"><ul id="header_nav"><li class="login_list"><a class="login_block_q" href="http://www.manew.com/tao">淘帖</a></li><li class="login_list"><a class="login_block_q" href="http://www.manew.com/thread-32240-1-1.html" rel="nofollow">微信签到</a></li></ul></div><div class="bus_search"> <div class="scbar_narrow cl" id="scbar">
帖子 搜索- 首页首页
- 专栏专栏
- 问答问答
- 译馆译馆
- 资源资源
- 博客博客
<ul class="bus_box animated fadeInUp manew_dhxt">
-
开发者专栏
+ 关注
关注:1690
当前位置:游戏蛮牛 › 技术专区 › 开发者专栏
- __________________________________________________________________________________
开发者干货区版块规则:
1、文章必须是图文形式。(至少2幅图)
2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
3、本版块只支持在游戏蛮牛原创首发,不支持转载。
4、本版块回复不得无意义,如:顶、呵呵、不错……【真的会扣分的哦】
5、……
__________________________________________________________________________________
- Curved UI - VR Ready Solution To Bend Warp Your Canvas!
- Crepuscular Rays
- Cinematic Sequencer - SLATE
- Adam Adventurer
- 自己做的一个单机斗地主游戏
- 自己做的一个消消乐小游戏
- 刚刚买的两套低模
- 模拟发送http协议工具
- Compass Navigator Pro 1.4.1
- ColorMGR 2.3
[雨松MOMO]Unity3D研究院之打开照相机与本地相册进行裁剪显示(三十三)
楼主
- 积分
- 2191
- 排名
- 4688
- 昨日变化
- 6
199
主题209
帖子2191
积分- UID
- 36308
- 好友
- 0
- 蛮牛币
- 5039
- 威望
- 0
- 注册时间
- 2014-7-25
- 在线时间
- 65 小时
- 最后登录
- 2017-5-4
- 发消息
最近做项目需要用到这个功能,就是在Unity中调用本地相册或直接打开摄像机拍照并且裁剪一部分用于用户头像,今天研究了一下,那么研究出成果了MOMO一定要分享给大家。Unity与Android的交互还有谁不会?? 如果有不会的朋友请看MOMO之前的文章喔,Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)这里有关交互的方式就不详细说明,主要将如何在Unity中打开摄像机、在Unity中打开本地相册,选一个照片后如何进行裁剪,最后将图片转换成Texture显示在U3D的世界当中。
首先看看Eclipse中的Android插件部分,我的包名是com.xys请大家与MOMO保持一致,Unity工程中也需要是这个包名噢。
UnityTestActivity.java 这个类是Unity的插件主类,在这里调用是打开摄像机 还是本地相册的方法。
<
font
face
=
"Verdana,"
>
package com.xys;
import android.
content
.Context;
import android.
content
.Intent;
import android.os.Bundle;
import com.unity
3
d.player.UnityPlayerActivity;
public
class
UnityTestActivity extends UnityPlayerActivity
{
/
/
public
class
UnityTestActivity extends Activity
{
Context mContext
=
null;
@Override
public void onCreate
(
Bundle savedInstanceState
)
{
super.onCreate
(
savedInstanceState
)
;
mContext
=
this;
}
/
/
Unity中会调用这个方法,用于区分打开摄像机 开始本地相册
public void TakePhoto
(
String str
)
{
Intent intent
=
new
Intent
(
mContext
,
WebViewActivity.
class
)
;
intent.putExtra
(
"type"
,
str
)
;
this.startActivity
(
intent
)
;
}
}
<
/
font
>
然后是WebViewActivity.java 这里主要处理用户打开摄像机或本地相册后如何进行裁剪图片,并且把裁剪的图片储存在本地文件中。
<
font
face
=
"Verdana,"
>
package com.xys;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.unity
3
d.player.UnityPlayer;
import android.app.Activity;
import android.
content
.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.
view
.KeyEvent;
import android.widget.ImageView;
public
class
WebViewActivity extends Activity
{
ImageView imageView
=
null;
public static final int NONE
=
0
;
public static final int PHOTOHRAPH
=
1
;
/
/
拍照
public static final int PHOTOZOOM
=
2
;
/
/
缩放
public static final int PHOTORESOULT
=
3
;
/
/
结果
public static final String IMAGE_UNSPECIFIED
=
"image/*"
;
public final static String FILE_NAME
=
"image.png"
;
public final static String DATA_URL
=
"/data/data/"
;
@Override
protected void onCreate
(
Bundle savedInstanceState
)
{
super.onCreate
(
savedInstanceState
)
;
setContentView
(
R.layout.
main
)
;
imageView
=
(
ImageView
)
this.findViewById
(
R.
id
.imageID
)
;
String type
=
this.getIntent
(
)
.getStringExtra
(
"type"
)
;
/
/
在这里判断是打开本地相册还是直接照相
if
(
type.
equals
(
"takePhoto"
)
)
{
Intent intent
=
new
Intent
(
MediaStore.ACTION_IMAGE_CAPTURE
)
;
intent.putExtra
(
MediaStore.EXTRA_OUTPUT
,
Uri.fromFile
(
new
File
(
Environment.getExternalStorageDirectory
(
)
,
"temp.jpg"
)
)
)
;
startActivityForResult
(
intent
,
PHOTOHRAPH
)
;
}
else
{
Intent intent
=
new
Intent
(
Intent.ACTION_PICK
,
null
)
;
intent.setDataAndType
(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
,
IMAGE_UNSPECIFIED
)
;
startActivityForResult
(
intent
,
PHOTOZOOM
)
;
}
}
@Override
protected void onActivityResult
(
int requestCode
,
int resultCode
,
Intent
data
)
{
if
(
resultCode
=
=
NONE
)
return
;
/
/
拍照
if
(
requestCode
=
=
PHOTOHRAPH
)
{
/
/
设置文件保存路径这里放在跟目录下
File picture
=
new
File
(
Environment.getExternalStorageDirectory
(
)
+
"/temp.jpg"
)
;
startPhotoZoom
(
Uri.fromFile
(
picture
)
)
;
}
if
(
data
=
=
null
)
return
;
/
/
读取相册缩放图片
if
(
requestCode
=
=
PHOTOZOOM
)
{
startPhotoZoom
(
data
.getData
(
)
)
;
}
/
/
处理结果
if
(
requestCode
=
=
PHOTORESOULT
)
{
Bundle extras
=
data
.getExtras
(
)
;
if
(
extras !
=
null
)
{
Bitmap photo
=
extras.getParcelable
(
"data"
)
;
imageView.setImageBitmap
(
photo
)
;
try
{
SaveBitmap
(
photo
)
;
}
catch
(
IOException e
)
{
/
/
TODO Auto
-
generated catch block
e.printStackTrace
(
)
;
}
}
}
super.onActivityResult
(
requestCode
,
resultCode
,
data
)
;
}
public void startPhotoZoom
(
Uri uri
)
{
Intent intent
=
new
Intent
(
"com.android.camera.action.CROP"
)
;
intent.setDataAndType
(
uri
,
IMAGE_UNSPECIFIED
)
;
intent.putExtra
(
"crop"
,
"true"
)
;
/
/
aspectX aspectY 是宽高的比例
intent.putExtra
(
"aspectX"
,
1
)
;
intent.putExtra
(
"aspectY"
,
1
)
;
/
/
outputX outputY 是裁剪图片宽高
intent.putExtra
(
"outputX"
,
300
)
;
intent.putExtra
(
"outputY"
,
300
)
;
intent.putExtra
(
"return-data"
,
true
)
;
startActivityForResult
(
intent
,
PHOTORESOULT
)
;
}
public void SaveBitmap
(
Bitmap bitmap
)
throws IOException
{
FileOutputStream fOut
=
null;
/
/
注解
1
String
path
=
"/mnt/sdcard/Android/data/com.xys/files"
;
try
{
/
/
查看这个路径是否存在,
/
/
如果并没有这个路径,
/
/
创建这个路径
File destDir
=
new
File
(
path
)
;
if
(
!destDir.
exists
(
)
)
{
destDir.mkdirs
(
)
;
}
fOut
=
new
FileOutputStream
(
path
+
"/"
+
FILE_NAME
)
;
}
catch
(
FileNotFoundException e
)
{
e.printStackTrace
(
)
;
}
/
/
将Bitmap对象写入本地路径中,Unity在去相同的路径来读取这个文件
bitmap.compress
(
Bitmap.CompressFormat.PNG
,
100
,
fOut
)
;
try
{
fOut.flush
(
)
;
}
catch
(
IOException e
)
{
e.printStackTrace
(
)
;
}
try
{
fOut.
close
(
)
;
}
catch
(
IOException e
)
{
e.printStackTrace
(
)
;
}
}
@Override
public
boolean
onKeyDown
(
int keyCode
,
KeyEvent
event
)
{
if
(
keyCode
=
=
KeyEvent.KEYCODE_BACK
&
&
event
.getRepeatCount
(
)
=
=
0
)
{
/
/
当用户点击返回键是 通知Unity开始在
"/mnt/sdcard/Android/data/com.xys/files"
;路径中读取图片资源,并且现在在Unity中
UnityPlayer.UnitySendMessage
(
"Main Camera"
,
"messgae"
,
FILE_NAME
)
;
}
return
super.onKeyDown
(
keyCode
,
event
)
;
}
}
<
/
font
>
注解1:主要是路径”/mnt/sdcard/Android/data/com.xys/files”,如下图所示,我们在这里把文件保存在这个路径下。为什么要把图片2进制文件写在这里呢? 还记得以前MOMO给大家说过在Unity中访问Android或IOS本地2进制文件时用到的这个路径,Application.persistentDataPath 该路径等价于 /mnt/sdcard/Android/data/com.xys/files ,当然后者的包名是对应的工程包名,这样在Unity中可以找到对应裁剪后的图片文件,并且显示在Unity中。
AndroidManifest.xml 这个文件也没什么好说的,大家看看吧。
<
manifest xmlns
:
android
=
"http://schemas.android.com/apk/res/android"
package
=
"com.xys"
android
:
versionCode
=
"1"
android
:
versionName
=
"1.0"
>
<
application
android
:
icon
=
"@drawable/ic_launcher"
android
:
label
=
"@string/app_name"
>
<
activity
android
:
name
=
".UnityTestActivity"
android
:
label
=
"@string/app_name"
>
<
activity
android
:
name
=
".WebViewActivity"
>
<
/
activity
<
/
activity
<
/
application
然后把上面的Android工程打包做成插件放在Unity中。如下图所示,这个我的Unity工程中对应的路径。如果看不懂的朋友请看我之前的文章哈。
然后看Test.cs脚本,它直接挂在摄像机身上。
using
UnityEngine;
using
System.Collections;
using
System.IO;
public
class
Test
:
MonoBehaviour
{
public GUISkin skin;
Texture texture;
void Update
(
)
{
if
(
Input.GetKeyDown
(
KeyCode.Escape
)
|| Input.GetKeyDown
(
KeyCode.Home
)
)
{
Application.Quit
(
)
;
}
}
void OnGUI
(
)
{
GUI.skin
=
skin;
if
(
GUILayout.Button
(
"打开手机相册"
)
)
{
/
/
调用我们制作的Android插件打开手机相册
AndroidJavaClass jc
=
new
AndroidJavaClass
(
"com.unity3d.player.UnityPlayer"
)
;
AndroidJavaObject jo
=
jc.GetStatic
(
"currentActivity"
)
;
jo.Call
(
"TakePhoto"
,
"takeSave"
)
;
}
if
(
GUILayout.Button
(
"打开手机摄像机"
)
)
{
/
/
调用我们制作的Android插件打开手机摄像机
AndroidJavaClass jc
=
new
AndroidJavaClass
(
"com.unity3d.player.UnityPlayer"
)
;
AndroidJavaObject jo
=
jc.GetStatic
(
"currentActivity"
)
;
jo.Call
(
"TakePhoto"
,
"takePhoto"
)
;
}
if
(
texture !
=
null
)
{
/
/
注意! 我们在这里绘制Texture对象,该对象是通过
/
/
我们制作的Android插件得到的,当这个对象不等于空的时候
/
/
直接绘制。
GUI.DrawTexture
(
new
Rect
(
100
,
300
,
300
,
300
)
,
texture
)
;
}
}
void messgae
(
string
str
)
{
/
/
在Android插件中通知Unity开始去指定路径中找图片资源
StartCoroutine
(
LoadTexture
(
str
)
)
;
}
IEnumerator LoadTexture
(
string
name
)
{
/
/
注解
1
string
path
=
"file://"
+
Application.persistentDataPath
+
"/"
+
name
;
WWW www
=
new
WWW
(
path
)
;
while
(
!www.isDone
)
{
}
yield
return
www;
/
/
为贴图赋值
texture
=
www.texture;
}
}
注解1:请大家一定要注意这个路径的写法, 前面一定要加 “File://” 不然无法读取。OK说了这么多我们看看这个项目运行的效果,激动人心的时刻来临啦 嚯嚯嚯嚯!!!
1.首次进入的画面, 这里的图片是我刚刚从相册选择的
2.打开相册我们选择一张图片
3. 选择一张图片,我们进行裁剪
最后我们返回到Unity中界面。新的图片Unity已经完成读取,界面上已经修改成刚刚我裁剪的啦,哇咔咔。 怎么样,还不错啦? 哈哈后。这个做用户头像肯定给力 蛤蛤。
如果点击打开摄像机按钮,拍照完毕后会提示裁剪,裁减完毕返回到Unity界面中同样能看到效果。
最后MOMO将本篇博文的源码放出来, 源码包括Android的工程 与Unity的工程,雨松MOMO祝大家学习愉快,大家互相学习互相进步,加油哇咔咔,啦啦啦。
下载地址:http://vdisk.weibo.com/s/ac5ZB
unity3d 打开相册;unity3d 图片 裁剪;unity 裁剪图片;unity bitmap;unity 调用相册;unity bitmap 转texture;unity3d 相册;unity3d的图片裁剪;unity 图片裁剪;bitmap unity;unity 调用本地相册;unity texture bitmap;unity bitmap texture
相关帖子
- • 前三星美国研究院总监出任uSens凌感副总裁
- • Unity3D研究院之手游开发中所有特殊的文件夹
- • Unity3D研究院之Prefab里面的Prefab关联问题
- • Unity3D研究院transform.parent = parent坐标就乱了
- • Unity3D之meta文件里timeCreated变化导致SVN改变
- • 谁做过IOS截屏,并且保存在相册可以直接看或者直接调用IOS截屏功能?求指教
- • Unity保存图片到Android相册
- • 发布到安卓图片没法在相册中看到
- 每日推荐:
- 蛮牛高薪急聘 VR软件工程师,欢迎简历投过来~~
- Facebook希望开发者帮助他们优化VR社交Spaces
unity
—unity3d
—蛮牛币攻略
—勋章荣誉
—官方QQ群和微信
—英宝通4.0公开课
—VR项目开发需求
—虚拟现实
—AR/VR
—untiy博客
举报
aimgcount[290626] = ['44031','44030','44029','44028','44027','44023'];attachimggroup(290626);var aimgfid = 0;
- 积分
- 1980
- 排名
- 518
- 昨日变化
- 2
27
主题537
帖子1980
积分- UID
- 2429
- 好友
- 5
- 蛮牛币
- 2932
- 威望
- 0
- 注册时间
- 2013-8-22
- 在线时间
- 270 小时
- 最后登录
- 2015-10-6
- 发消息
- Unity3D研究院之Unity中连接本地或局域网MySQL数据库(五十九)
- Unity3D研究院之Unity中连接本地或局域网MySQL数据库(五十九)
- Unity3D研究院之Unity中连接本地或局域网MySQL数据库(五十九)
- Unity3D研究院之Unity中连接本地或局域网MySQL数据库
- <Unity3D>unity连接数据库MySQL
- Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)
- Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)
- Unity3D研究院之在Unity中打开第三方数据库配合Android开发(转)
- Unity3D研究院之使用C#语言建立本地数据库
- Unity3D研究院之使用C#语言建立本地数据库
- 局域网中连接mysql数据库
- unity3d中连接数据库 MySQL
- unity3d中连接数据库 MySQL
- Unity3D研究院之Android NDK编译C/C++结合Unity实现本地数据共享
- Unity3D 学习笔记(四) Unity连接MySQL数据库
- Unity3D研究院之Android NDK编译C/C++结合Unity实现本地数据共享(二十八)
- Unity3D研究院之Android NDK编译C/C++结合Unity实现本地数据共享(二十八)
- Unity3D研究院之Android NDK编译C/C++结合Unity实现本地数据共享(二十八)
- Arcgis online如何制作与底图数据点匹配的要素图层?
- MPTS转多路SPTS的IP输出实现
- RxJava学习记录
- Mysql自动备份
- CentOS6.8服务器LAMP环境搭建(四) 源码安装phpMyAdmin4.7.0
- Unity3D研究院之Unity中连接本地或局域网MySQL数据库
- ubuntu+nginx简单调试指令
- 我理解的docker
- Error:java: 无效的源版本: 1.8 idea 报错完美解决
- Linux--进程组,会话,精灵进程(fork一次与fork两次的区别)
- 鼓励有价值的创新
- Git之忽略文件(ignore file)
- jTessBoxEditor训练验证码图片
- 为RIDE创建桌面快捷方式