[Unity3D]自制UnityForAndroid二维码扫描插件

简介:

一周左右终于将二维码生成和扫描功能给实现了,终于能舒缓一口气了,从一开始的疑惑为啥不同的扫码客户端为啥扫出来的效果不同?通用的扫描器扫出来就是一个下载APK,自制的扫描器扫出来是想要的有效信息,然后分析出来其实二维码无非就是记录了一个简单的信息,一般是URL,然后自己在URL上面做文章!得知了需求之后然后开始着手做二维码的生成,用了开源框架QRCode,然后解析ZXing,都是站在前人的肩膀上继续做下去,我就没有深入研究二维码的深层次方面的东西,大概只知道生成是根据一个二维Bool数组然后绘制像素点形参一个方形的图片,其中三个角跟中间一块是不包含信息的三个角是三个小矩形,是为了定位位置,正中间有一个方形区域没有信息是为了放置Logo用的,相比大家也比较清楚,都见过,现在餐厅,地铁上基本都有扫一扫的标志,呵呵,二维码已经成为一个通用的宣传手段!然后我接到这个任务之后就要一步一步的分析问题到解决问题,从生成一张二维码图片开始,到批量生成再到批量生成页面,并且每个页面中要嵌套与之对应的二维码,然后再到学习Android,因为之前没怎么接触过Java方向的东西,然后简单的看了两天Android,对Android开发有了一个大体的认识和了解,然后再到学习Android和Unity的交互,再到做出Android插件等过程,截止今晚终于将功能实现,没有什么解决不了的问题,只要动手,动脑,一切都OK!

接下来我就分享一下制作过程,关于生成二维码的我当时写了一个教程,结果还被抨击了,说.net程序员就你这水平...对于这个网友,我的确很惭愧,我的水平有限,写的内容的确比较浅显,无法满足你求高深技术的法眼,但我写出来是为了更过广大初学者,希望能给他们一点入门的帮助!我想说的人外有人,不要觉得自己厉害就看不起新手或者没你水平高的人,说不定将来他就有可能技术比你厉害!总而言之,或许对大牛而言,这个二维码的生成和解析很简单,但我还是坚持下下来,一来也是对自己这一周多时间的一个小结,二来还是前面那句话,希望和广大初学者一起学习和进步,一起交流!

二维码生成和交互可以看我之前写的文章:二维码生成 http://blog.csdn.net/dingxiaowei2013/article/details/22925709,Unity和Android交互http://blog.csdn.net/dingxiaowei2013/article/details/24485937。在这基础之上,然后接着实现功能!

更多精彩内容请关注我的微博  @丁小未   转载请注明出处:http://blog.csdn.net/dingxiaowei2013/article/details/24677795

效果图:

2014042901143940620140429011451500201404290115032962014042901151334320140429011521156

手机扫描后的效果:

20140429012051687


20140429012106187

说明:这里是Unity界面调用Android的Java方法跳转Android开发的Activity视图,然后在Android中Java方法调用Unity再回到Unity界面。

源码

Unity:

[csharp] view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. using UnityEngine;  

  2. using System.Collections;  

  3. publicclass NewBehaviourScript : MonoBehaviour {  

  4. private AndroidJavaObject activity;  

  5. privatestring result="http://blog.csdn.net/dingxiaowei2013";  //result用于接收二维码的返回值  

  6. void Start()  

  7.    {  

  8.        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  

  9.        activity = jc.GetStatic<AndroidJavaObject>("currentActivity");  

  10.    }  

  11. void OnGUI()  

  12.    {  

  13. //点击扫码调用Android方法

  14. if (GUI.Button(new Rect(Screen.width / 2 - 50, 20, 100, 50), "点击扫码"))  

  15.        {  

  16.            activity.Call("Show");  

  17.        }  

  18.        GUI.Label(new Rect(Screen.width / 2 - 100, 120, 300, 20), result);  

  19.    }  

  20. //这个是Android调用的方法

  21. void GetString(string str)  

  22.    {  

  23.        result = str;  

  24.    }  

  25. }  


Android:

  1. package com.example.qr_codescan;  

  2. import android.content.Intent;  

  3. import android.os.Bundle;  

  4. import android.widget.ImageView;  

  5. import android.widget.TextView;  

  6. import com.unity3d.player.UnityPlayer;  

  7. import com.unity3d.player.UnityPlayerActivity;  

  8. publicclass MainActivity extends UnityPlayerActivity {  

  9. privatefinalstaticint SCANNIN_GREQUEST_CODE = 1;  

  10. /**

  11.     * 显示扫描结果

  12.     */

  13. private TextView mTextView ;  

  14. /**

  15.     * 显示扫描拍的图片

  16.     */

  17. private ImageView mImageView;  

  18. @Override

  19. protectedvoid onCreate(Bundle savedInstanceState) {  

  20. super.onCreate(savedInstanceState);  

  21. //setContentView(R.layout.activity_main);

  22. //      mTextView = (TextView) findViewById(R.id.result);

  23. //      mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);

  24. //      

  25. //      //点击按钮跳转到二维码扫描界面,这里用的是startActivityForResult跳转

  26. //      //扫描完了之后调到该界面

  27. //      Button mButton = (Button) findViewById(R.id.button1);

  28. //      mButton.setOnClickListener(new OnClickListener() {

  29. //          

  30. //          @Override

  31. //          public void onClick(View v) {

  32. //              Intent intent = new Intent();

  33. //              intent.setClass(MainActivity.this, MipcaActivityCapture.class);

  34. //              intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

  35. //              startActivityForResult(intent, SCANNIN_GREQUEST_CODE);

  36. //          }

  37. //      });

  38.    }  

  39. publicvoid Show()  

  40.    {  

  41.        Intent intent = new Intent();  

  42.        intent.setClass(MainActivity.this, MipcaActivityCapture.class);  

  43.        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  

  44.        startActivityForResult(intent, SCANNIN_GREQUEST_CODE);  

  45.    }  

  46. @Override

  47. protectedvoid onActivityResult(int requestCode, int resultCode, Intent data) {  

  48. super.onActivityResult(requestCode, resultCode, data);  

  49. switch (requestCode) {  

  50. case SCANNIN_GREQUEST_CODE:  

  51. if(resultCode == RESULT_OK){  

  52.                Bundle bundle = data.getExtras();  

  53. //显示扫描到的内容

  54. //mTextView.setText(bundle.getString("result"));

  55. //显示

  56. //mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));

  57.                UnityPlayer.UnitySendMessage("Cube","GetString",bundle.getString("result"));  

  58.            }  

  59. break;  

  60.        }  

  61.    }    

  62. }  


导出插件:

然后我导出成插件,之前一个扫码插件是EasyCodeScanner,然后我今后的网名叫Aladdin,我也命名一个扫码的Android插件,为AladdinCodeScanner,日后可能继续完成添加上IOS的扫码功能,完善这一插件,我这也是深受EasyCodeScanner的折磨才决定自食其力!之前好不容易找到一个扫码的插件EasyCodeScanner,结果发现会出错还有关键的是没有实现Android的扫码功能,Android部分的方法没实现,所以也促成了我自己写插件的念头,今天如愿以偿,一身轻松!时间不早,感觉熬夜身体有点吃不消了,身体是本钱,明儿继续将工程补上!晚安!

工程源码:http://down.51cto.com/data/1156726
















本文转蓬莱仙羽 51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1404352,如需转载请自行联系原作者
相关文章
|
JavaScript 前端开发 程序员
用Unity不会几个插件怎么能行?Unity各类插件及教程推荐
话说工欲善其事必先利其器,程序员总是有一些开发利器,而对于Unity3D开发程序员来说,插件就是非常好用的利器。 今天博主,就将比较好用的插件推荐给大家,希望一起学习品鉴。
|
9月前
|
C# 开发者
推荐一款C#开源的操作简单、免费的屏幕录制和GIF动画制作神器
推荐一款C#开源的操作简单、免费的屏幕录制和GIF动画制作神器
|
10月前
|
编解码 数据可视化 安全
【unity本站最全系列】Unity基础不动山不摇回顾篇
【unity本站最全系列】Unity基础不动山不摇回顾篇
71 0
|
JavaScript Android开发
uniapp 项目双屏异显插件使用方式
uniapp 项目双屏异显插件使用方式
637 0
uniapp 项目双屏异显插件使用方式
|
监控 搜索推荐 C#
听音乐不过瘾?自制一个音乐播放器!【附带函数源码】
听音乐不过瘾?自制一个音乐播放器!【附带函数源码】
134 0
听音乐不过瘾?自制一个音乐播放器!【附带函数源码】
Unity3D原生编辑器的界面太丑?那就试试这款插件吧
是否已经看厌了Unity一成不变的白灰色了?现在给大家带来一个可以更换Unity的主题颜色的插件,下面就让我们来看看怎么使用吧
|
前端开发 图形学
Unity 之大屏幕多点触控插件 TouchScript 9.0 入门指南(上)
在端游上大家应该多数都使用过的EasyTouch插件,在EasyTouch 5.0.17 最新版本扩展方法中我有过简单的介绍,今天说一下另一款触摸插件,它非常适合做展示类大屏幕的多点触控TouchScript,在Unity上的AssetStore也是五...
3164 0
|
图形学
Unity 3D中ToLua-UGUI使用说明、导入Unity流程、制作登陆界面
ToLua制作登录界面 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) 请支持大神开发者:骏擎CP,蒙哥等奔赴在前线的开发前辈们 到官方网站下载,或Unity商店购买: ToLua官方网站 —— 下载资源 1 英文好的朋友,可直接看官方文档。
2530 0
|
Java 开发工具 Android开发
|
移动开发 索引
ReactNative实现图集功能
需求描述:    图片缩放、拖动、长按保存等基础图片查看的功能;   展示每张图片文本描述; 实现效果,如图:    实现步骤 使用第三方插件:react-native-image-zoom-viewer 插件GitHub地址:https://github.
906 0

热门文章

最新文章