嵌入項(xiàng)目的AndroidStudio版本和Unity版本
Unity2019
AndroidStudio2021
01 新建一個(gè)新的安卓項(xiàng)目
項(xiàng)目里新建一個(gè)button
實(shí)現(xiàn)button的點(diǎn)擊事件進(jìn)入游戲
package com.example.project_android;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = findViewById(R.id.button1);
//注冊(cè)監(jiān)聽器
button1.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
onClickButton1(view);
break;
default:
break;
}
}
private void onClickButton1(View view) {
System.out.println("觸發(fā)點(diǎn)擊進(jìn)入游戲的按鈕事件");
}
}
unity導(dǎo)出android工程
導(dǎo)出的工程文件夾放入原生的安卓項(xiàng)目
放入如下代碼
include ':unityLibrary'
project(':unityLibrary').projectDir=new File('.\\UnityAndroidProject\\unityLibrary')
放入如下代碼
implementation project(':unityLibrary')
implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])
放入如下代碼
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
android:process=":UnityActivity"
項(xiàng)目里添加UnityGameActivity.java
package com.example.project_android;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
//進(jìn)入到這個(gè)類就進(jìn)入了unity游戲畫面
public class UnityGameActivity extends UnityPlayerActivity {
private static final String TAG = "UnityGameActivity";
private boolean isFinish = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SendMessageToUnity("AndroidToUnityMessage");
}
public void finishUnityGame(String str) {
Log.i(TAG, "unity傳給Android的信息: "+ str );
isFinish = true;
//關(guān)閉unity游戲返回app
finish();
}
public void SendMessageToUnity(String str) {
Log.i(TAG, "Android傳給unity的信息: " + str);
//其中GameData是unity生成的gameobject,腳本要掛在上面。AndroidToUnity是unity里實(shí)現(xiàn)的方法。str是傳過去的值。
UnityPlayer.UnitySendMessage("GameData", "AndroidToUnity", str);
}
@Override
protected void onResume() {
Log.e(TAG, "onResume: " );
super.onResume();
}
@Override
protected void onPause() {
Log.e(TAG, "onPause: " );
super.onPause();
if (!isFinish){
mUnityPlayer.pause();
}
}
@Override
protected void onStop() {
Log.e(TAG, "onStop: " );
super.onStop();
}
@Override
protected void onDestroy() {
Log.e(TAG, "onDestroy: " );
super.onDestroy();
}
}
需要配置,才能找到這個(gè)類
<activity android:name="com.example.project_android.UnityGameActivity" android:theme="@style/UnityThemeSelector" android:screenOrientation="landscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:hardwareAccelerated="false">
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<meta-data android:name="android.notch_support" android:value="true" />
</activity>
unity的腳本加上可以接收信息的方法,腳本需要掛在GameData上
public void AndroidToUnity(string str)
{
Debug.Log("Unity接收Android信息 = " + str);
//通過Newtonsoft.Json插件的JsonConvert.DeserializeObject方法,將json格式的string數(shù)據(jù)轉(zhuǎn)換為model數(shù)據(jù)
//UnityDataModel unityDataModel = JsonConvert.DeserializeObject<UnityDataModel>(str);
//Debug.Log("unityDataModel.key1 = " + unityDataModel.key1);
//Debug.Log("unityDataModel.key2 = " + unityDataModel.key2);
}
完整代碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
public class GameData : MonoBehaviour
{
public void IOSToUnity(string str)
{
Debug.Log("Unity接收IOS信息 = " + str);
//通過Newtonsoft.Json插件的JsonConvert.DeserializeObject方法,將json格式的string數(shù)據(jù)轉(zhuǎn)換為model數(shù)據(jù)
UnityDataModel unityDataModel = JsonConvert.DeserializeObject<UnityDataModel>(str);
Debug.Log("unityDataModel.key1 = " + unityDataModel.key1);
Debug.Log("unityDataModel.key2 = " + unityDataModel.key2);
}
public void AndroidToUnity(string str)
{
Debug.Log("Unity接收Android信息 = " + str);
//通過Newtonsoft.Json插件的JsonConvert.DeserializeObject方法,將json格式的string數(shù)據(jù)轉(zhuǎn)換為model數(shù)據(jù)
//UnityDataModel unityDataModel = JsonConvert.DeserializeObject<UnityDataModel>(str);
//Debug.Log("unityDataModel.key1 = " + unityDataModel.key1);
//Debug.Log("unityDataModel.key2 = " + unityDataModel.key2);
}
private void Awake()
{
DontDestroyOnLoad(this);
}
}
安卓端在button的點(diǎn)擊事件里,加上啟動(dòng)unity游戲的方法
private void onClickButton1(View view) {
System.out.println("觸發(fā)點(diǎn)擊進(jìn)入游戲的按鈕事件");
startActivity(new Intent(view.getContext(), UnityGameActivity.class));
}
解決安裝以上雙圖標(biāo)問題
unity導(dǎo)出的android sdk 和 android studio導(dǎo)出的android sdk版本要一致
解決:E/Unity: Failed to load 'libmain.so’問題,需要在unity做如下配置:E/Unity: Failed to load 'libmain.so’問題,需要在unity做如下配置
游戲啟動(dòng)閃退問題解決
<string name="game_view_content_description">Game view</string>
Unity端結(jié)束游戲時(shí)發(fā)信息給安卓端
核心代碼
#if UNITY_ANDROID
try
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject overrideActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
//AndroidToUnityMessage是發(fā)送給Android的信息,finishUnityGame是安卓端接收的方法
overrideActivity.Call("finishUnityGame", "AndroidToUnityMessage");
}
catch (Exception e)
{
Debug.Log(e.Message);
}
#endif
安卓可以橫屏且可以旋轉(zhuǎn)的設(shè)置
unity里的設(shè)置文章來源:http://www.zghlxwxcb.cn/news/detail-400999.html
AndroidStudio里的設(shè)置文章來源地址http://www.zghlxwxcb.cn/news/detail-400999.html
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:screenOrientation="sensorLandscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:hardwareAccelerated="false">
到了這里,關(guān)于Unity游戲嵌入Android應(yīng)用(融合為一個(gè)應(yīng)用)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!