`

Unity3D与Android SDK交互

 
阅读更多

一、Android SDK准备

1、新建Android Library工程unitysdk



2、新建libs目录,将Unity for Android的 class.jar(Unity安装目录里有)复制到此。在此我这里,重命名为unity3dplayer.jar并且添加到安卓工程里去。

3、新建主Activity:UnityTestActivity 继承 UnityPlayerActivity。

本文件主要是回调Unity游戏对象Canvas。方法AndroidReceive,传递参数message。

添加如下代码:

 

package com.qikuyx.unitysdk;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

/**
 * Created by Administrator on 2015/11/17.
 */
public class UnityTestActivity extends UnityPlayerActivity{
    static final String TAG = "UnityTestActivity";
    Context mContext = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         mContext = this;
    }

    public void StartActivity0(String name) {
        Intent intent = new Intent(mContext,TestActivity0.class);
        intent.putExtra("name", name);
        Log.i(TAG, "收到Unity传递过来的参数:" + name);
        this.startActivity(intent);
    }
    public static void sendMessageToUnity(String message){
        Log.i(TAG, "向Unity传递参数:"+message);
        UnityPlayer.UnitySendMessage("Canvas", "AndroidReceive", message);
    }
}
4、新建TestActivity0,添加如下代码:

 

package com.qikuyx.unitysdk;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


/**
 * Created by Administrator on 2015/11/17.
 */
public class TestActivity0 extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TextView text = (TextView)this.findViewById(R.id.textView1);
        text.setText(this.getIntent().getStringExtra("name"));
        final EditText editText = (EditText) this.findViewById(R.id.editText);
        Button close = (Button)this.findViewById(R.id.button0);
        close.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                TestActivity0.this.finish();
                UnityTestActivity.sendMessageToUnity(editText.getText().toString());
            }
        });
    }
}
 5、新建布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:orientation="vertical">
        <ImageView
            android:src="@drawable/ic_launcher"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            />
        <TextView android:id="@+id/textView0"
            android:layout_width="fill_parent"
            android:layout_height="41dp"
            android:textColor="#000000"
            android:textSize="18dip"
            android:text="@string/android_sdk_for_unity3d"
            android:background="#af1727d3" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="43dp"
            android:text="@string/received_values"
            android:id="@+id/textView"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="40dp" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="fill_parent"
            android:layout_height="42dp"
            android:textColor="#000000"
            android:textSize="18dip"
            android:background="#af17d3c6" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/editText"
            android:layout_gravity="center_horizontal"
            android:hint="@string/input_parameters"
            android:layout_marginTop="40dp" />

        <Button android:id="@+id/button0"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:text="@string/send_and_close"/>
    </LinearLayout>
</ScrollView>
 6、values/string.xml添加如下:
<resources>
    <string name="app_name">UnitySDK</string>
    <string name="android_sdk_for_unity3d">Android SDK for Unity3D</string>
    <string name="received_values">收到Unity传递过来的参数:</string>
    <string name="input_parameters">请在此输入向Unity传送的参数</string>
    <string name="send_and_close">传送并关闭当前Android Activity</string>
</resources>
 7、AndroidManifest配置如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.qikuyx.unitysdk"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:name="com.qikuyx.unitysdk.UnityTestActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.qikuyx.unitysdk.TestActivity0"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            >
        </activity>

    </application>

</manifest>
 8、build.gradle配置文件:
apply plugin: 'com.android.library'
def SDKVersion = '1.0'
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        defaultConfig {
        }
        main {
            java.srcDirs = ['src/main/java']
            manifest.srcFile 'src/main/AndroidManifest.xml'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile files('libs/unity3dplayer.jar')
}
task clearJar(type: Delete) {
    delete "build/outputs/UnitySDK_$SDKVersion"+".jar"
}
task makeUnitySDKJar(type: Copy) {
    from("build/intermediates/bundles/release/")
    into("build/outputs/")
    include("classes.jar")
    rename ("classes.jar", "UnitySDK_$SDKVersion"+".jar")
}
makeUnitySDKJar.dependsOn(clearJar, build)
 9、通过执行如下命令就可以生成Jar包供Unity使用:
gradle makeUnitySDKJar
 Android部分到此结束,下面开始Unity部分说明。
二、Unity准备
1、新建一个名为QikuLogin的Unity3D工程。
2、在Hierarchy上。选中Main Camera新建Button(右键->UI->Button)。
3、上面步骤中将自动创建Canvas,然后在其上依次添加2个InputField,最后结构如下:


 4、在Project控件上,新建Android目录和bin子目录。将Android中打包行程的jar放于此。
Android的res文件放于Assets\Plugins\Android
Android的AndroidManifest.xml文件放于Assets\Plugins\Android
最终目录如下:


 5、Assets\Plugins下新建C#脚本文件Test.cs,并且挂载到Canvas上。
本文件主要是进行Java对象初始化和方法调用。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Test : MonoBehaviour {
    private AndroidJavaClass jc;
    private AndroidJavaObject jo;
    public InputField receivedText;
    public InputField sendText;
    // Use this for initialization
    void Start () {
        jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
    }
	
	// Update is called once per frame
	void Update () {
	
	}
    void OnGUI() {
        
    }
    void AndroidReceive(string content) {
        receivedText.text = content;
    }
    public void openAndroidActivity() {
        jo.Call("StartActivity0", sendText.text);
    }
}

 

 6、将控件Button事件关联到openAndroidActivity函数,2个InputField关联到脚本文件的receivedText和sendText变量。
最终配置如下:


 

 

 

7、Unity选择File->build settings->android->player settings,右边设置 Bundle Identifiery为Jar包名。

8、然后执行Build And Run,真机测试!


 

 

 

 

 
 
 
  • 大小: 49.5 KB
  • 大小: 11.6 KB
  • 大小: 25 KB
  • 大小: 130.8 KB
  • 大小: 140.3 KB
  • 大小: 148.6 KB
  • 大小: 149.4 KB
  • 大小: 201.3 KB
  • 大小: 101.2 KB
  • 大小: 99.6 KB
  • 大小: 109.8 KB
  • 大小: 103.4 KB
  • 大小: 99.1 KB
分享到:
评论

相关推荐

    unity3D接入小米SDK

    1. **Unity3D与Android SDK交互** Unity3D是一个跨平台的游戏引擎,支持iOS、Android等多个操作系统。在Android平台上,Unity3D通过Java原生代码(.java文件)与Android系统进行交互。要接入小米SDK,我们需要创建...

    Unity 接入Android SDK demo

    Unity是一款强大的跨平台游戏开发引擎,广泛用于创建2D和3D游戏以及各种交互式体验。在本项目中,"Unity接入Android SDK demo"旨在演示如何将Unity游戏或应用与Android原生SDK相结合,实现更丰富的功能和更好的用户...

    unity使用android sdk 示例工程(eclipse)

    然后,在Android Studio中编译和调试应用,测试Unity与Android SDK的交互是否正常。 这个示例工程“unity使用android sdk 示例工程(eclipse)”提供了一个具体的实现案例,帮助开发者理解如何在Unity中整合Android...

    Unity3D Android 状态栏

    在Unity3D中,通过自定义原生插件或使用Unity的Android插件系统,可以与Android系统进行交互,控制这些元素的显示和样式。 1. **创建Android插件**:在Unity项目中,新建一个Android插件目录,例如`Plugins/Android...

    Unity3D 接入 移动MM 计费SDK代码

    在移动游戏开发领域,Unity3D是一个非常流行的跨平台引擎,它允许开发者创建高质量的2D和3D游戏,并发布到多个操作系统,包括Android。移动MM(Mobile Market)计费SDK是针对移动应用的一种收费解决方案,它使得游戏...

    unity3d-android程序源码

    Android程序的构建过程中,Unity3D会生成一个Android工程,其中包括Java代码,用于处理与Android系统交互的部分,如初始化Unity引擎、处理系统事件、调用原生Android API等。这些Java代码通常位于`src`目录下,...

    Unity3d 集成Android 完整例子,附源码

    Unity3D是一款强大的跨平台...通过学习这个完整例子,你可以了解Unity3D与Android的集成流程,理解如何编写和使用Android插件,以及如何处理权限和打包发布。这将有助于你在实际项目中更高效地开发跨平台游戏和应用。

    unity接入SDK流程(android)

    - 删除Unity默认的`UnityPlayerActivity`,创建一个新的`GameActivity.java`,继承自`UnityPlayerActivity`,这个新的Activity用于与SDK交互。 6. **配置AndroidManifest.xml**: - 根据SDK提供商的文档,更新`...

    Android Unity3D基础.pdf

    Unity3D与Android平台的结合为开发者提供了创建高质量移动应用和游戏的强大工具。 ### 三、Unity3D与Android的集成 1. **环境搭建**:在开始使用Unity3D开发Android应用之前,需要确保安装了正确的软件环境。这...

    unity3d开发Android教程

    通过“Unity3D+Android+开发教程.pdf”,你将逐步掌握Unity3D与Android集成的关键步骤,从而能够独立开发出在Android平台上运行的游戏或应用。结合个人实践和“学习心得”,你的Unity3D技能将得到快速提升。记得不断...

    Unity_android_sdk.zip

    在Unity中,Android SDK是与Java原生接口(JNI)交互、处理Android特定功能(如权限管理、通知、硬件访问等)和构建APK所必需的。 该压缩包中的"android-sdk-windows"文件夹包含以下关键组件: 1. **tools**: 这个...

    Android Frangment 嵌套Unity3d加控制实例

    在Android开发中,有时我们需要将丰富的3D交互体验融入到我们的应用中,这时Unity3D作为一个强大的游戏引擎,常被用于构建高质量的3D场景。本文将深入探讨如何在Android应用中嵌套Unity3D,并通过Fragment和...

    Unity3D Android 开发教程

    #### 三、Unity3D项目设置与发布 ##### 设置Unity3D项目 在开始发布之前,需要在Unity3D中对项目进行适当的设置,以确保能够正确地打包和发布到Android平台: - **Player Settings**:在Unity编辑器中,通过菜单...

    Unity3d调用Android新浪微博

    首先,我们需要了解Unity3D与Android原生代码的交互机制。Unity3D可以通过`UnityPlayerActivity`来调用Android的Java代码,这通常通过`AndroidJavaObject`和`AndroidJavaClass`这两个类来实现。开发者需要创建一个...

    Android Unity3D基础

    1. 安装Unity3D和Android SDK:首先,确保安装了最新版本的Unity3D以及与目标Android设备相匹配的Android SDK。Unity3D会自动配置Android Build Support,但可能需要手动配置Android SDK路径。 2. 创建新项目:在...

    极光SDKjpush-unity3d-plugin-master.zip

    这个名为“jpush-unity3d-plugin-master.zip”的压缩包,包含了极光推送服务与Unity3D游戏引擎集成的插件源码,使得开发者能够方便地在Unity3D平台上实现极光推送功能,覆盖了Android和iOS两大主流移动操作系统。...

    Unity和Android交互工程

    在Unity中创建Android项目时,我们需要确保Unity版本与Android SDK和NDK兼容。设置完成后,开发者可以使用Unity编辑器设计游戏场景、编写代码,并在Unity的内置Android模拟器或连接的Android设备上进行预览和测试。 ...

    AndroidStudio 3.0 与 Unity3d 2017交互

    在探讨Android Studio 3.0与Unity3d 2017交互的过程中,我们需要关注几个核心知识点:Android SDK接入的两种方式、如何在Android Studio中构建应用工程以及如何编写和修改MainActivity来与Unity3d引擎进行交互。...

    Unity3D在Android平台上的Sqlite库

    描述中的“unity3d在windows平台上开发Android游戏所需要的Sqlite的库文件”即指这一过程,通常在Windows环境下,开发者会通过SDK Manager或者手动下载获取适用于Android的SQLite库。 具体步骤包括: 1. **下载...

    Unity3d Android Native Plugin

    首先,要理解Unity3D与Android原生代码的交互方式。Unity3D提供了一个名为"Plugins"的目录,用于存放原生平台的代码库。对于Android,这通常包括.so动态链接库文件(Linux下的共享库)和对应的Java接口。Java接口...

Global site tag (gtag.js) - Google Analytics