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

简介: 想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是没反应,没办法看源码,结果发现只实现了IOS部分,没有Android部分,我屮艸芔茻.

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

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

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

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

实现步骤:

一、创建Android工程

1.创建工程



2.导入Unity相关jar

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



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。

5.导出jar包

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




点击Finish结束!

二、创建Unity工程

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

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


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), "http://blog.csdn.net/dingxiaowei2013");
        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)



4.真机测试

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

更多教程欢迎关注 微博

相关文章
|
1月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
74 3
|
1月前
|
vr&ar 图形学 API
Unity与VR控制器交互全解:从基础配置到力反馈应用,多角度提升虚拟现实游戏的真实感与沉浸体验大揭秘
【8月更文挑战第31天】虚拟现实(VR)技术迅猛发展,Unity作为主流游戏开发引擎,支持多种VR硬件并提供丰富的API,尤其在VR控制器交互设计上具备高度灵活性。本文详细介绍了如何在Unity中配置VR支持、设置控制器、实现按钮交互及力反馈,结合碰撞检测和物理引擎提升真实感,助力开发者创造沉浸式体验。
72 0
|
1月前
|
图形学 开发者 UED
Unity游戏开发必备技巧:深度解析事件系统运用之道,从生命周期回调到自定义事件,打造高效逻辑与流畅交互的全方位指南
【8月更文挑战第31天】在游戏开发中,事件系统是连接游戏逻辑与用户交互的关键。Unity提供了多种机制处理事件,如MonoBehaviour生命周期回调、事件系统组件及自定义事件。本文介绍如何有效利用这些机制,包括创建自定义事件和使用Unity内置事件系统提升游戏体验。通过合理安排代码执行时机,如在Awake、Start等方法中初始化组件,以及使用委托和事件处理复杂逻辑,可以使游戏更加高效且逻辑清晰。掌握这些技巧有助于开发者更好地应对游戏开发挑战。
60 0
|
2月前
|
开发者 图形学 Java
Unity物理引擎深度揭秘:从刚体碰撞到软体模拟,全面解析实现复杂物理交互的技巧与秘诀,助你打造超真实游戏体验
【8月更文挑战第31天】物理模拟在游戏开发中至关重要,可让虚拟世界更真实。Unity作为强大的跨平台游戏引擎,内置物理系统,支持从刚体碰撞到布料模拟的多种功能。通过添加Rigidbody组件,可实现物体受力和碰撞;使用AddForce()施加力;通过关节(如Fixed Joint)连接刚体以模拟复杂结构。Unity还支持软体物理,如布料和绳索模拟,进一步增强场景丰富度。掌握这些技术,可大幅提升游戏的真实感和玩家体验。
43 0
|
2月前
|
图形学 iOS开发
Unity与IOS⭐最基础的交互演示
Unity与IOS⭐最基础的交互演示
|
2月前
|
C# 图形学 C语言
Unity3D学习笔记3——Unity Shader的初步使用
Unity3D学习笔记3——Unity Shader的初步使用
40 0
|
4月前
|
图形学
【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎
【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎
127 0
【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎
|
4月前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
41 0
|
4月前
|
图形学
【unity小技巧】unity3D寻路指示轨迹预测
【unity小技巧】unity3D寻路指示轨迹预测
54 0
|
4月前
|
图形学
【unity小技巧】unity3d环境带雾的昼夜系统变化
【unity小技巧】unity3d环境带雾的昼夜系统变化
27 0
下一篇
无影云桌面