Unity游戏嵌入Android应用(融合为一个应用)

这篇具有很好参考价值的文章主要介绍了Unity游戏嵌入Android应用(融合为一个应用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

嵌入项目的AndroidStudio版本和Unity版本
Unity2019
AndroidStudio2021
Unity游戏嵌入Android应用(融合为一个应用)
Unity游戏嵌入Android应用(融合为一个应用)
01 新建一个新的安卓项目
Unity游戏嵌入Android应用(融合为一个应用)
项目里新建一个button
Unity游戏嵌入Android应用(融合为一个应用)
实现button的点击事件进入游戏

Unity游戏嵌入Android应用(融合为一个应用)

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);
        //注册监听器
        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("触发点击进入游戏的按钮事件");
    }
}

unity导出android工程

Unity游戏嵌入Android应用(融合为一个应用)
Unity游戏嵌入Android应用(融合为一个应用)

导出的工程文件夹放入原生的安卓项目

Unity游戏嵌入Android应用(融合为一个应用)
放入如下代码

include ':unityLibrary'
project(':unityLibrary').projectDir=new File('.\\UnityAndroidProject\\unityLibrary')

Unity游戏嵌入Android应用(融合为一个应用)
放入如下代码

implementation project(':unityLibrary')
implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])

Unity游戏嵌入Android应用(融合为一个应用)
放入如下代码

flatDir {
  dirs "${project(':unityLibrary').projectDir}/libs"
}

Unity游戏嵌入Android应用(融合为一个应用)

android:process=":UnityActivity"

Unity游戏嵌入Android应用(融合为一个应用)
项目里添加UnityGameActivity.java

Unity游戏嵌入Android应用(融合为一个应用)

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;
//进入到这个类就进入了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;
        //关闭unity游戏返回app
        finish();
    }
    public void SendMessageToUnity(String str) {
        Log.i(TAG, "Android传给unity的信息: " + str);
        //其中GameData是unity生成的gameobject,脚本要挂在上面。AndroidToUnity是unity里实现的方法。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();
    }
}

需要配置,才能找到这个类

<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游戏嵌入Android应用(融合为一个应用)
unity的脚本加上可以接收信息的方法,脚本需要挂在GameData上

Unity游戏嵌入Android应用(融合为一个应用)

    public void AndroidToUnity(string str)
    {
        Debug.Log("Unity接收Android信息 = " + str);
        //通过Newtonsoft.Json插件的JsonConvert.DeserializeObject方法,将json格式的string数据转换为model数据
        //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数据转换为model数据
        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数据转换为model数据
        //UnityDataModel unityDataModel = JsonConvert.DeserializeObject<UnityDataModel>(str);
        //Debug.Log("unityDataModel.key1 = " + unityDataModel.key1);
        //Debug.Log("unityDataModel.key2 = " + unityDataModel.key2);
    }

    private void Awake()
    {
        DontDestroyOnLoad(this);
    }
}

安卓端在button的点击事件里,加上启动unity游戏的方法

private void onClickButton1(View view) {
    System.out.println("触发点击进入游戏的按钮事件");
    startActivity(new Intent(view.getContext(), UnityGameActivity.class));
}

解决安装以上双图标问题

Unity游戏嵌入Android应用(融合为一个应用)
unity导出的android sdk 和 android studio导出的android sdk版本要一致

解决:E/Unity: Failed to load 'libmain.so’问题,需要在unity做如下配置:E/Unity: Failed to load 'libmain.so’问题,需要在unity做如下配置

Unity游戏嵌入Android应用(融合为一个应用)
Unity游戏嵌入Android应用(融合为一个应用)
Unity游戏嵌入Android应用(融合为一个应用)
Unity游戏嵌入Android应用(融合为一个应用)
游戏启动闪退问题解决
Unity游戏嵌入Android应用(融合为一个应用)

<string name="game_view_content_description">Game view</string>

Unity端结束游戏时发信息给安卓端

核心代码

#if UNITY_ANDROID
            try
            {
                AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
                AndroidJavaObject overrideActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
                //AndroidToUnityMessage是发送给Android的信息,finishUnityGame是安卓端接收的方法
                overrideActivity.Call("finishUnityGame", "AndroidToUnityMessage");
            }
            catch (Exception e)
            {
                Debug.Log(e.Message);
            }
#endif

安卓可以横屏且可以旋转的设置

unity里的设置

Unity游戏嵌入Android应用(融合为一个应用)
AndroidStudio里的设置文章来源地址https://www.toymoban.com/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">

到了这里,关于Unity游戏嵌入Android应用(融合为一个应用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity开发一个FPS游戏之二

    在之前的文章中,我介绍了如何开发一个FPS游戏,添加一个第一人称的主角,并设置武器。现在我将继续完善这个游戏,打算添加敌人,实现其智能寻找玩家并进行对抗。完成的效果如下: fps_enemy_demo   首先是设计敌人,我们可以在网上找到一些好的免费素材,例如在Unity商

    2024年03月17日
    浏览(59)
  • Unity之创建第一个2D游戏项目

    一 Unity环境配置 1.1 Untity资源官网下载:https://unity.cn/releases 1.2 Unity Hub集成环境,包含工具和项目的管理 1.3 Unity Editor编辑器 1.4 Visual Studio 2022脚本编辑器 1.5 AndroidSKD,JDK,NDK工具,用于android环境的运行 二 创建Unity项目 2.1 新建2D模板项目 2.2 新建2D物体 2.3 新建C#脚本文件 

    2024年02月04日
    浏览(49)
  • 用unity写一个2D类的拼图游戏

    前几天接了一个拼图项目刚好现在写完了,拿出来分享,拼图不难,我也是看了一个官方案例写的,因为当我们写图片跟随鼠标的时候,鼠标已经有一个图片了,这个图片会遮挡射线,然后就无法判断当前拼图块在哪里,话不多说,上菜 1、新建总控脚本LevelManager 2、新建Pu

    2024年02月08日
    浏览(45)
  • Unity 实现一个FPS游戏的全过程

    Unity是一款功能强大的游戏引擎,它提供了各种各样的工具和功能,以帮助开发者轻松地创建精美的3D游戏和应用程序。在本文中,我们将使用Unity实现一个FPS游戏的全过程,从场景设计、角色控制、敌人AI到最终的打包发布。 对啦!这里有个游戏开发交流小组里面聚集了一帮

    2024年02月05日
    浏览(68)
  • 【Unity之竖屏游戏制作】如何做一个竖屏的手机游戏

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 普通矩形地图生成 菱形矩形地图生成 单排生成 双排铺满 ⭐ ⭐ 添加缓存池的本质其实就是资源的循环利用,减少多次CG。

    2024年03月19日
    浏览(52)
  • 初识Unity(十步做好你的第一个unity小游戏)

    一、unity的整体认识 1、创建项目工程文件以及unity布局介绍 (1)打开unityhub,新建项目工程(Project)选择保存路径。 (2)unity的多种布局(窗口的排列)。 认识了tall布局下各个view的功能,四个开发视图(Scene,Project,Hierarchy,Inspector)以及一个game视图。 Scene(场景)视图

    2024年01月24日
    浏览(57)
  • 【Unity】教你如何使用Unity制作一个简单的跑酷游戏

    其实用Unity制作游戏并不难,如果你想学习,那我就建议你想从制作一个简单的跑酷游戏来找到兴趣,因为如果你一开始就一直学习一些没什么必要的语法,这样就会让你一开始就失去了信心,失去了学习Unity的动力,所以如果你先学习如何制作一个简单的跑酷地图,然后你就

    2024年02月21日
    浏览(57)
  • 【Unity】Unity开发学习和项目实践02——创建第一个Unity项目和游戏物体

    创建第1个Unity项目 打开Unity hub,点击新项目 以下有四处地方需要注意选择: 1.Unity编辑器版本 2.项目模板 3.项目名称 4.项目保存位置 点击创建项目 ok,进入编辑器了 把编辑器界面布局稍微改一下,改成2by3 点击Edit 点击 project settings,这是对我们所创建工程的设置 此外还有对

    2024年01月25日
    浏览(56)
  • Unity 3D游戏开发+脚本编程完整指南:制作第一个游戏:3D滚球跑酷

    教程相关资源 Unity 3D游戏开发+脚本编程完整指南(工程文件+PPT).zip 本节利用前面的知识来实现第一个较为完整的小游戏,如 图 1-21 所示。 图1-21 3D滚球跑酷游戏完成效果 1. 功能点分析 游戏中的小球会以恒定速度向前移动,而玩家控制着小球 左右移动来躲避跑道中的黄色障

    2024年02月21日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包