纳金网

标题: unity调用android的方法 [打印本页]

作者: 五十六个民族    时间: 2017-8-9 11:21
标题: unity调用android的方法
unity调用android的方法
我们需要在运行起来Unity引擎之后,调用Java类中的方法获取怪兽的姓名,就需要Uniy调用Android的方法。
unity调用java方法一共有四种形式,分别是:
        1.没有返回值的普通方法

AndroidJavaObject jo = new AndroidJavaObject("android.content.res.Configuration");
jo.Call("setToDefaults");
        2.带有返回值的普通方法
AndroidJavaObject jo = new AndroidJavaObject("java.lang.String", "some string");

int hash = jo.Call<int>("hashCode");
        3.没有返回值的静态方法
AndroidJavaObject jo = new AndroidJavaObject("android.os.Binder");

jo.CallStatic("flushPendingCommands");
        4.带有返回值的静态方法
AndroidJavaObject jo = new AndroidJavaObject("java.lang.String");

string valueString = jo.CallStatic<string>("valueOf", 42.0);
        我们往游戏对象上绑定一些操作–Operate.cs :
using UnityEngine;

using System.Collections;

public class Operate : MonoBehaviour
{

        public Transform target;

        public UILabel label;

        public bool flag = true;

        /// <summary>
        
/// 定义旋转速度
        
/// </summary>
        
public float RotateSpeed=45;

        
// Use this for in  itialization
        
void Start ()
        {

                //Debug.Log("hello");
               
this.name = "Manager";
GetData ();
        
}
        
/// <summary>

        /// 通过调用android中的方法获取name,并为label赋值
        
/// </summary>
        
void GetData()
        {

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

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

                string name = jo.Call <string>("getName", "成功调用android方法");

                label.text = name;
        
}


        // Update is called once per frame
        
void Update ()
        {

                //target.Rotate (Vector3.up * Time.deltaTime * RotateSpeed);
        
}
        
void OnClick()
        {

                Screen.orientation = ScreenOrientation.Landscape;

                if (flag)
                {

                        target.localScale = new Vector3 (0.5f, 0.5f, 0.5f);

                        flag = false;

                        //label.text = "123456";

                }
                else
                {

                        target.localScale = new Vector3 (0.75f, 0.75f, 0.75f);

                        flag = true;

                        //label.text = "000000";

                }

        }

        /// <summary>
        
/// 顶掉之前的scene
        
/// </summary>
        
void Unload()
        {

                Application.LoadLevel (1);

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

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

                jo.Call ("makePauseUnity");
        
}

        
/// <summary>

        /// 放大
        
/// </summary>
        
void ZoomIn()
        {

                target.localScale = new Vector3 (0.75f, 0.75f, 0.75f);
        
}


        /// <summary>

        /// 缩小

        /// </summary>
        
void ZoomOut()
        {

                target.localScale = new Vector3 (0.5f, 0.5f, 0.5f);

        }

}

代码和场景编写好之后,就可以使用unity到处apk文件运行了。不过我们需要在eclipse中进行二次开发,所以需要到处android工程。
在导出的时候,可以选择导出”Google Android Project”。

在导出android工程或apk之前,需要在”Player Settings”进行一些配置:

assets文件下面是unity的一些资源文件,包括场景和渲染的文件。
libs下面当然就是jar包和so文件了。
src下面包含三个java类。建议使用UnityPlayerActivity.java
打开UnityPlayerActivity之后,会发现里面有一个对象时UnityPlayer的实例,我们做android中嵌套U3D场景的时候,就是把这个实例当成一个view添加到我们的布局中。
你已经有android工程了,此时只需要把assets的文件和libs的包拷贝到你的项目中去,在把需要配置的类在AndroidManifest.xml中配置一下。
没有工程,那么只需要把unity导出的工程导入你的IDE中即可。
看一下MainActivity的布局:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:background="#E0EEE0"

        android:gravity="center_horizontal"

        androidrientation="vertical" >


        <!-- 3D视图区域 -->


        <LinearLayout

                android:id="@+id/u3d_layout"

                android:layout_width="match_parent"

                android:layout_height="300dp"

                android:background="#a6a9af"

                androidrientation="vertical" >

        </LinearLayout>


        <!-- 放大 -->


        <Button

                android:id="@+id/zoom_in_btn"

                android:layout_width="200dp"

                android:layout_height="wrap_content"

                android:layout_marginTop="20dp"

                android:padding="10dp"

                android:text="放大" />


        <!-- 缩小 -->


        <Button

                android:id="@+id/zoom_out_btn"

                android:layout_width="200dp"

                android:layout_height="wrap_content"

                android:layout_marginTop="20dp"

                android:padding="10dp"

                android:text="缩小" />


        <!-- 全屏 -->


        <Button

                android:id="@+id/u3d_fullscreen_btn"

                android:layout_width="200dp"

                android:layout_height="wrap_content"

                android:layout_marginTop="20dp"

                android:padding="10dp"

                android:text="全屏" />


</LinearLayout>





Unity调用Android.rar

3.02 KB, 下载次数: 4


作者: dnsao    时间: 2017-8-19 10:57
感谢分享
作者: cosmo999    时间: 2017-8-20 23:03
看看 谢分享
作者: dang050    时间: 2017-8-21 10:22
unity调用android的方法
作者: GPSGIS3D    时间: 2017-9-18 11:52
unity调用android的方法
作者: zhangchuny    时间: 2017-9-19 15:22
谢谢奉献
作者: Kasug    时间: 2018-1-11 11:15
感谢分享
作者: wxc624453689    时间: 2018-2-8 12:46
学习一下
作者: lexlee    时间: 2018-2-8 14:10
2222222222222222222222




欢迎光临 纳金网 (http://old.narkii.com/club/) Powered by Discuz! X2.5