首页 > 其他分享 >[Unity3D]Unity+Android交互教程——让手机"动"起来

[Unity3D]Unity+Android交互教程——让手机"动"起来

时间:2023-07-04 21:32:53浏览次数:46  
标签:Unity3D 调用 20 Unity activity new Android


更多教程请访问:

http://dingxiaowei.cn/

 

想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是没反应,没办法看源码,结果发现只实现了IOS部分,没有Android部分,我屮艸芔茻...,神伤!用IOS真机测试吧,还是有问题,果断放弃了,下定决心自己动手丰衣足食,虽然不了解Android,但没有学不起来的,只要想,就没有实现不了的!!!首先还是得学习一下Android和Unity的简单交互,在这儿写个详细点的教程!供初学者学习,当然网上也有这方面的教程,有的地方不注意的话,还是会碰到困扰的,下面是详细步骤!更多教程敬请关注我的微博

效果:这里展示的Unity调用Android原生的方法实现点击Unity界面中的按钮,然后实现手机的震动!

关于最基本的交互,可以参考这篇文章,Unity与Android基本交互,然后在这基础之上来做实现手机震动,其实也差不多!可能重复了,当自我巩固吧,呵呵!

测试方法:必须要真机测试!!!

实现步骤:

一、创建Android工程

1.创建工程

[Unity3D]Unity+Android交互教程——让手机"动"起来_jar

[Unity3D]Unity+Android交互教程——让手机"动"起来_UnityAndroid交互_02

[Unity3D]Unity+Android交互教程——让手机"动"起来_jar_03

[Unity3D]Unity+Android交互教程——让手机"动"起来_android_04

 

2.导入Unity相关jar

Jar目录:unity的安装路径\Editor\Data\PlaybackEngines\androidplayer\bin下的classes.jar

[Unity3D]Unity+Android交互教程——让手机"动"起来_android_05

 

 

3.打开MainActivity.java,导入各种包,编写自己的函数

package com.example.clickshake;

import android.os.Bundle;
import com.unity3d.player.UnityPlayerActivity;
import android.app.Service;
import android.os.Vibrator;  //震动的包

public class MainActivity extends UnityPlayerActivity {

	private Vibrator mVibrator01;//声明一个振动器对象
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}
	
	//震动函数
	public void ClickShake()
	{
		mVibrator01 = (Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE); 
		mVibrator01.vibrate(new long[]{100,10,100,1000},-1);//自定义整栋模式,只震动一次
	}
	
	
	//判断大小
	public int Max(int a,int b)
	{
		if(a>b)
			return a;
		return b;
	}

}

添加unityActivity,使MainActivity继承UnityPlayerActivity,并把SetContentView函数删掉(不然到手机上启动程序的时候就会只看到一句HelloWorld),这里有两个自己自定义的函数主要的就是上面的没有参数的调用振动器的自定义函数,还有个就是有返回值有参数的比较大小的函数,这里用两个不同的函数在Unity中调用做对比!

4.修改XML并且添加震动权限

添加允许震动的权限,选择AndroidManifest.xml,然后点击Permissions->Add UserPermission->android.perssion.VIBRATE。

[Unity3D]Unity+Android交互教程——让手机"动"起来_android_06

5.导出jar包

在项目根目录上右击->Export

 

[Unity3D]Unity+Android交互教程——让手机"动"起来_android_07

 

[Unity3D]Unity+Android交互教程——让手机"动"起来_jar_08

点击Finish结束!

二、创建Unity工程

1.在Assets下创建Plugins/Android文件夹,这个文件夹是特殊文件夹,专门用与存放Android的包文件,以便调用Android接口

将文件的xml,jar,res,libs文件放在Android文件下

[Unity3D]Unity+Android交互教程——让手机"动"起来_Android_09

 

2.写Unity调用Android代码

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {


    private AndroidJavaObject activity;
    private int res = 0;
	// Use this for initialization
	void Start () {
		AndroidJavaClass jc=new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
        res = activity.Call<int>("Max", new object[] { 10, 20 });
	}

    void OnGUI()
    {
        GUI.Label(new Rect(20, 20, 300, 20), "调用的Android方法:求出10和20中比较大的数字是"+res.ToString());
        GUI.Label(new Rect(20, 70, 300, 20), 
        if ( GUI.Button(new Rect(Screen.width / 2 - 20, Screen.height / 2 + 20, 100, 40), "点击震动"))
        {
            activity.Call("ClickShake");
        }
        
    }
}

说明AndroidJavaObject是一个java对象,这里获取的是java视图,然后调用自定义方法。

(注:初步了解这里的参数之所以填”com.unity3d.player.UnityPlayer”和”currentActivity”,是因为在生成jar文件的时候,已经指定了MainActivityclass继承UnityPlayerActivity,也在XML指定了MainActivity是Main class)

activity.Call<int>("","");这个调用的是有返回值的方法,int是返回类型,activity.Call("");调用的是没返回值没参数的方法

 

3.导出设置(Importent)

[Unity3D]Unity+Android交互教程——让手机"动"起来_jar_10

 

4.真机测试

我就不上传截图了,大概就是一个按钮,能够点击使手机震动,还有一个label,显示10和20比较的结果值。

 

更多教程欢迎关注 微博

 

标签:Unity3D,调用,20,Unity,activity,new,Android
From: https://blog.51cto.com/dingxiaowei/6625787

相关文章

  • android tts语音使用的一些资料(转)
     TextToSpeech简称TTS,是Android1.6版本中比较首要的新功能。将所指定的文本转成不同语言音频输出。它可以方便的嵌入到游戏或者使用程序中,增强用户体验。   在讲解TTSAPI和将这项功能使用到你的实际项目中的要领之前,先对这套TTS引擎有个初步的明白。 对TTS资源的大......
  • android 音标的抓取 腾讯在线词典API
       DICT.CN的webAPI已经close了,本想好,调用下接口把读音给抓下来。幸好,网上还是有好多的资源可以用的。昨天回去的时候,做了一个QQ的word抓音标的例子,还是大公司好,虽然非常的BS腾讯这狗抄袭人家的创意甚至是产品。 下面是几个开发的API测试了了是用于用的,但是你的程序中,文件......
  • android 基于ListView和CheckBox实现多选和全选记录的功能(转)
    [原]基于ListView和CheckBox实现多选和全选记录的功能应用开发中经常会有从数据库中读取数据显示,然后选中多条、全部记录并且删除的需求。在做定制系统联系人的时候也遇到这样的需求,下面写个简单的通过ListView和CheckBox实现多选、全选的例子。下面是具体的代码,有问题请留言。代......
  • Android 4.0 SDK的离线方式安装
     昨天看新闻得知新版本的android系统发布了,android4.0是人们期盼多时的版本了。作为一个IT技术人员,迫不及待地就奔向了http://developer.android.com去看看有没有新的SDK公布出来,当时是上午,没见到有更新,心想一定是若干天后才会发布。没想到同事下午告诉我,新版的SDK已经发布了。......
  • unity协程(IEnumerator)开始和结束
    仅用于记录遇到的问题和解决方案。快速阅览:一、结束协程无效:协程方法需要单独存一份privateIEnumeratormyTest,再开始和结束不直接传入方法名,而是使用这份保存的myTest进行开始和结束。二、再次开启协程时少跑了几行代码:再次开始同一个方法名的协程时,不是从第一句代码开始执行......
  • Android 原生混合flutte运行:Could not resolve io.flutter。
    Android原生项目混合开发flutter,在运行新项目的时候报错。>Couldnotresolveio.flutter:flutter_embedding_debug:1.0.0-2a3401c9bbb5a9a9aec74d4f735d18a9dd3ebf2d. 解决方案添加   url"https://storage.flutter-io.cn/download.flutter.io"repositories{......
  • unity前后端通信 json解析 HTTP POST(BestHttp插件实现)
    1.配置请求体中的Json字符串1request_data=newRequestBodyClass();2request_data.a="Json第一个字段";3request_data.b="Json第二个字段";4stringbody=JsonUtility.ToJson(request_data);2.实例化HTTPRequest,请求头方法设置为POST,并且设置请求头中类型为json......
  • 如何用Airtest脚本无线连接Android设备?
    1.前言之前我们已经详细介绍过如何用AirtestIDE无线连接Android设备:手把手教你用AirtestIDE无线连接手机!,它的关键点在于,需要先adbconnect一次,才能点击connect按钮无线连接上该设备:但是有很多同学,在使用纯Airtest脚本的形式连接无线设备时,还是遇到了一些困难。今天我们......
  • 为什么Unity使用AssetBundle热更的时候要剔除掉.mainfest文件
    1)为什么Unity使用AssetBundle热更的时候要剔除掉.mainfest文件​2)Addressable热更,断点续传问题3)在线性空间,使用后处理解决UI混合问题这是第341篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。UWA社区主页:comm......
  • Unity3D:工具栏
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生工具栏在UnityEditor顶部可以看到工具栏。工具栏不是窗口,是Unity界面中唯一无法重新排列的部分。有关场景视图中的其他工具,请参阅叠加。工具栏显示在Editor顶部控制:描述:从帐户下拉菜单访问您的......