Unity调用安卓Android的Toast

需求:在游戏中弹窗消息,调起安卓的Toast

项目中需要做Unity和安卓交互时,经常需要通过安卓Toast来做简单的输出,以便于测试。

方法一:Unity中,C#主导

// Unity调用安卓的土司
public static void MakeToast(string info)
{
    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast");
    currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => {
        Toast.CallStatic<AndroidJavaObject>("makeText", currentActivity, info, Toast.GetStatic<int>("LENGTH_LONG")).Call("show");
    }));
    
    /*
    // 匿名方法中第二个参数是安卓上下文对象,除了用currentActivity,还可用安卓中的GetApplicationContext()获得上下文。
    AndroidJavaObject context = currentActivity.Call<AndroidJavaObject>("getApplicationContext");
    */
}

这段代码也是Unity调用安卓(C#主导)的经典例子。项目中可用同样方法来寻找包,找到类成员,调用函数并传参。

 

方法二:Android Studio中,Java主导

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
    }

    // 该方法由Unity调用
    public void makeToast(final String msg){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG);
            }
        });
    }
}

该方法需要将安卓项目导出aar包,作为插件导入到Unity的Assets目录中,来给Unity使用。


更多参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值