Android调Unity之反射法

无需导入Unity的classes.jar包和UnityPlayerActivity类文件
地址记录:【Unity教程】如何实现Unity和Android原生互相调用?_unity调用android方法_3DCAT实时渲染云的博客-CSDN博客

package com.unityandroidsdk.test;

import android.app.Activity;
import android.widget.Toast;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class TestActivity {
    private Activity unityActivity;
    private Activity getActivity(){
        if (null == unityActivity){
            try{
                //反射获取到Unity的activity实例
                Class <?> classType = Class.forName("com.unity3d.player.UnityPlayer");
                Activity activity = (Activity)classType.getDeclaredField("currentActivity").get(classType);
                unityActivity = activity;
            } catch (IllegalAccessException e) {
                System.out.println(e.getMessage());
            } catch (ClassNotFoundException e) {
                System.out.println(e.getMessage());
            } catch (NoSuchFieldException e) {
                System.out.println(e.getMessage());
            }
        }
        return unityActivity;
    }

    /**
     * Andriod 调用 unity的方法 (反射法)
     * 1.调用的GameObject的名称
     * 2.方法名
     * 3.参数
     * 4.调用是否成功
     */
    public boolean CallUnity(String gameObjectName,String functionName,String args){
        try{
            //反射获取到Unity的UnitySendMessage方法
            Class <?> classType = Class.forName("com.unity3d.player.UnityPlayer");
            Method method = classType.getMethod("UnitySendMessage", String.class, String.class, String.class);
            method.invoke(classType,gameObjectName,functionName,args);
            return true;
        } catch (InvocationTargetException e) {
            System.out.println(e.getMessage());
        } catch (NoSuchMethodException e) {
            System.out.println(e.getMessage());
        } catch (IllegalAccessException e) {
            System.out.println(e.getMessage());
        } catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        }
        return false;
    }

    /**
     * 供unity调用,弹出一个view tips
     * @param content
     * @return
     */
    public boolean ShowToast(String content){
        Toast.makeText(getActivity(),content,Toast.LENGTH_SHORT).show();
        CallUnity("Bridge","NativeCallbackUnity","[TestActivity]hellow unity,i`m android");
        return true;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值