1、Unity
1.1 新建Unity工程
新建一个空工程,创建Text、Cube、空物体。
1.2 新建脚本
新建脚本MessageCenter,挂载到空物体上,并指定Text和Cube。
1.3 编辑脚本
选用了解析json的方式,接收到Android传来的消息,解析并执行对应事件,代码如下:
using UnityEngine;
using UnityEngine.UI;
public class MessageCenter : MonoBehaviour
{
public Text textMessage;
public void ShowMessage(string message)
{
textMessage.text = message;
}
}
1.4 导出
经过多次测试,各种问题,崩溃、黑屏、不显示文字,接不到消息等等。
目前只显示文字,最后还是选择导出apk和project结合;
解压apk得到assets和jniLibs;
在project中得到unity-classes.jar和UnityPlayerActivity.java。
配置如下:
2、Android
2.1 新建Android项目,导入文件
(1) 新建项目,然后将ssets、jniLibs两个文件夹,复制到工程中。
(3)导入unity-classes.jar(unity2android\unityLibrary\libs),右键,Add As Library
(4)将UnityPlayerActivity.java(unity2android\unityLibrary\src\main\java\com\unity3d\player)导入Android。
2.2 设计布局
(1)打开activity_main.xml
(2)添加一个按钮和一个布局
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/UnityView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="100dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"></LinearLayout>
<Button
android:id="@+id/buttonClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="150dp"
android:layout_marginEnd="150dp"
android:layout_marginBottom="20dp"
android:text="Click"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
2.3 编写代码
MainActivity类,引用com.unity3d.player.UnityPlayer,并继承UnityPlayerActivity
修改代码:
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取显示Unity视图的父控件
LinearLayout mParent=(LinearLayout)findViewById(R.id.UnityView);
//获取Unity视图
View mView=mUnityPlayer.getView();
//将Unity视图添加到Android视图中
mParent.addView(mView);
Button btnClick = findViewById(R.id.buttonClick);
btnClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UnityPlayer.UnitySendMessage("MessageCenter","ShowMessage","Click");
}
});
}
}
2.4 修改配置
修改build.gradle和strings.xml
ndk{
abiFilters 'arm64-v8a'
}
<string name="game_view_content_description">Game view</string>
3、结果