androidunity3d教程(Unity3D游戏版本更新怎么做)

:暂无数据 2026-08-01 00:50:06 :3

androidunity3d教程(Unity3D游戏版本更新怎么做)

大家好,今天小编来为大家解答以下的问题,关于androidunity3d教程,Unity3D游戏版本更新怎么做这个很多人还不知道,现在让我们一起来看看吧!

本文目录

Unity3D游戏版本更新怎么做

最近在学习android的知识,因为功能的需要,unity3d 要和android交互。最近公司的项目中遇到了unity3d 开发的app需要更新和自动安装的功能,但是使用unity3d是实现不了这样的功能的。这个时候就想到使用android原有的知识进行开发,然后打成jar包,导成插件,放到unity3d中去调用,想要找unity插件可到纳金论坛去找。
1.首先在eclipse或者android studio 中开发原有的app下载更新的功能。
*我这里是以eclipse为例开发的。
首先在eclipse中导入unity3d的jar包,class.jar,这里的class.jar在unity3d安装目录下,如下:D:\Unity5.2.3SetUp\Editor\Data\PlaybackEngines\androidplayer\Variations\il2cpp\Development\Classes
然后就要写相应的代码了,android的原有下载更新网上也有很多但是没有结合Untiy3d。具体的代码如下,首先要引入import com.unity3d.player.UnityPlayer,然后activity继承UnityPlayerActivity
package com.example.downapk;
import java.io.File;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends UnityPlayerActivity
{
private static String tag = "MainActivity";
private Handler mHandler = new Handler()
{
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
OpenFile();
break;
default:
break;
}
}
};
private AsyncTaskUtil mDownloadAsyncTask;
public float size;
public static MainActivity instance;
public static MainActivity getInstance()
{
return instance;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
}
public void SetSize(float size)
{
size = this.size;
Log.d(tag, this.size+"");
}
***隐藏网址***
{
mDownloadAsyncTask = new AsyncTaskUtil(MainActivity.this, mHandler);
***隐藏网址***
}
private void OpenFile() {
String str = "/test.apk";
String fileName = mDownloadAsyncTask.getFolderPath() + str;
File file = new File(fileName);
if (!file.exists()) {
Log.d("URL", "fileName:" + fileName);
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
Log.d("URL", "fileName:" + fileName);
startActivity(intent);
}
}
上面代码是主activity 表黑部分是要在unity中调用的。调用可以是一个按钮,例如
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic《AndroidJavaObject》("currentActivity");
jo.Call("StartLoad", ParentApp.getInstance().updateUrl, "test.apk");
这里是使用AsyncTask进行下载的,在后来可以看到下载进度。下面下载的代码。
package com.example.downapk;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.text.DecimalFormat;
import java.util.Timer;
import java.util.TimerTask;
import com.unity3d.player.UnityPlayer;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
public class AsyncTaskUtil extends AsyncTask《String, Double, Boolean》
{
public static final String TAG = "AsyncTaskUtil";
public static final int NOTIFICATION_PROGRESS_UPDATE = 0x10;//用于更新下载进度的标志
public static final int NOTIFICATION_PROGRESS_SUCCEED = 0x11;//表示下载成功
public static final int NOTIFICATION_PROGRESS_FAILED = 0x12;//表示下载失败
//URL
private String mUrl;
//activity
private Context mContext;
//任务定时器
private Timer mTimer;
//定时任务
private TimerTask mTask;
//主线程传递过来的handler
private Handler mHandler;
//所要下载的文件大小
private long mFileSize;
//已下载的文件大小
private long mTotalReadSize;
//AsyncTaskRunnable实现了Runnable接口,用于更新下载进度的显示
private AsyncTaskRunnable mRunnable;
//构造方法
public AsyncTaskUtil(Context context, Handler handler) {
mContext = context;
mHandler = handler;
mTimer = new Timer();
mTask = new TimerTask() {//在run方法中执行定时的任务
@Override
public void run() {
//size表示下载进度的百分比
float size = (float) mTotalReadSize * 100 / (float) mFileSize;
//通过AsyncTaskRunnable的setDatas方法下载的进度和状态(更新中、失败、成功)
mRunnable.setDatas(NOTIFICATION_PROGRESS_UPDATE, size);
//更新进度
mHandler.post(mRunnable);
}
};
mRunnable = new AsyncTaskRunnable(mContext);
}
// 执行耗时操作,params为文件名(空则写入null)
@Override
protected Boolean doInBackground(String... params) {
//任务定时器一定要启动
mTimer.schedule(mTask, 0, 500);
try {
mUrl = params;
//建立链接
URLConnection connection = new URL(mUrl).openConnection();
//获取文件大小
mFileSize = connection.getContentLength();
Log.d(TAG, "the count of the url content length is : " + mFileSize);
//获得输入流
InputStream is = connection.getInputStream();
//先建立文件夹
File fold = new File(getFolderPath());
if (!fold.exists()) {
fold.mkdirs();
}
String fileName = "";
//判断文件名:用户自定义或由url获得
if(params != null){
fileName = params;
} else{
fileName = getFileName(params);
}
//文件输出流
FileOutputStream fos = new FileOutputStream(new File(getFolderPath()
+ fileName));
byte;
int len;
while ((len = is.read(buff)) != -1) {
mTotalReadSize += len;
MainActivity.getInstance().size = (float) mTotalReadSize * 100 / (float) mFileSize;
DecimalFormat format = new DecimalFormat("0");
UnityPlayer.UnitySendMessage("UI Root","GetSize",format.format(MainActivity.getInstance().size)+"");
Log.d(TAG, "the count of the url content length is : " + MainActivity.getInstance().size);
fos.write(buff, 0, len);
}
fos.flush();
fos.close();
} catch (Exception e) {
//异常,下载失败
mRunnable.setDatas(NOTIFICATION_PROGRESS_FAILED, 0);
//发送显示下载失败
mHandler.post(mRunnable);
if(mTimer != null && mTask != null){
mTimer.cancel();
mTask.cancel();
}
e.printStackTrace();
return false;
}
//下载成功
mRunnable.setDatas(NOTIFICATION_PROGRESS_SUCCEED, 0);
mHandler.post(mRunnable);
if(mTimer != null && mTask != null){
mTimer.cancel();
mTask.cancel();
}
return true;
}
//由url获得文件名
private String getFileName(String string) {
return string.substring(string.lastIndexOf("/") + 1);
}
//下载文件夹路径
public String getFolderPath() {
return Environment.getExternalStorageDirectory().toString() + "/AsyncTaskDownload/";
}
// doInBackground方法之前调用,初始化UI
@Override
protected void onPreExecute() {
super.onPreExecute();
}
// 在doInBackground方法之后调用
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if (result) {
Toast.makeText(mContext, "Download Completed ! ", Toast.LENGTH_SHORT).show();
mHandler.sendEmptyMessage(1);
} else {
Toast.makeText(mContext, "Download Failed ! ", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onProgressUpdate(Double... values) {
super.onProgressUpdate(values);
}
}
标红的地方是王unity中传的,我想要在unity中看到下载的进度,当时试了unity调用android都没有成功,后来想从android中往unity中传
UnityPlayer.UnitySendMessage("UI Root","GetSize",format.format(MainActivity.getInstance().size)+"");
UI Root 表示在untiy中有这样一个gameobject 在gameobject 上面挂着一个脚本,脚本中有一个方法名称为GetSize(),最后一个为要在unity中看到的进度。
在unity中的调用代码为
public void GetSize(string str)
{
mSize = str;
Debug.Log(mSize + "************************");
text.text = "下载进度: " + mSize + "%";
if (mSize == "100")
{
Application.Quit();
}
}

如何给unity3d工程加入依赖的android工程

有些sdk的接入是提供jar包,这样的可以简单地将jar包制作成android plugin,加入到unity工程中,打包成apk输出。
而还有一些sdk,则是提供了一个lib工程。在sdk提供的文档里说明,要在android工程中,通过添加依赖的方式来添加。但是对于unity工程,这个就有点不一样。
经过多次试验,需要步骤:
1. 将sdk工程整个工程目录【注1】,加到plugins/android/%sdk name%目录下
2. 同时导出jar包,将jar包放置到plugins/android/libs目录中。
3. 然后可以选择制作android plugin的方式,或者直接在unity3d中进行调用。
【注1:具体包含的内容为:res/目录 libs/目录 assets/目录 AndroidManifest.xml .classpath project.properties .project proguard-project.txt 以及其他,依具体情况而定】
说一下在试验过程中遇到的一个奇怪的现象。在上面的步骤中,如果跳过步骤2,使用unity3d直接生成apk(情况a),与导出eclipse工程,再使用ecliipse生成apk(情况b),会出现两种不一样的情况。在情况a中,若调用sdk的接口,会收到classnotfound的异常,而情况b则可以正常通过。通过查看unity工程/Temp/StagingArea/目录,猜测,unity只是对plugins/android/%sdk name%目录下的资源文件进行处理,而src目录下的java文件并不处理。

如何在Unity3D实现Admob

Unity3d已经支持android,如何在程序里加入admob?
***隐藏网址***
用eclipse新建一个项目UnityAd,导入admob.jar包的GoogleAdMobAdsSdk-4.1.0.jar和Unity3d程序目录下的
然后编写一个Activity继承UnityPlayerActivity。
Java代码
《!-- base permission --》
《uses-permission android:name="android.permission.INTERNET"/》
《uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/》
《uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/》
《uses-permission android:name="android.permission.READ_PHONE_STATE"/》
《!-- base permission for location--》
《uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /》
《uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /》
《!-- base permission required by chartboost and baidu--》
《uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/》
《!-- permission required by mmedia --》
《uses-permission android:name="android.permission.RECORD_AUDIO" /》
《uses-feature android:name="android.hardware.microphone" android:required="false" /》
AndroidManifest.xml写成:
Xml代码
android:value="8115000" /》
《activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent"/》
《!-- Amazon Mobile Ads --》
《activity android:name="com.amazon.device.ads.AdActivity"
android:configChanges="keyboardHidden|orientation|screenSize"/》
《!-- InMobi --》
《activity android:name="com.inmobi.androidsdk.IMBrowserActivity"
android:configChanges="keyboardHidden|orientation|keyboard|smallestScreenSize|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:hardwareAccelerated="true" /》
1.找到UnityAd项目目录,把bin文件夹下的com文件夹打成jar包,jar包名为com.hsj.test.jar,将这个jar包拷贝到unity项目目录下的Assets\Plugins\Android\bin中。
2.把UnityAd项目目录下的res文件夹和AndroidManifest.xml文件拷贝到unity项目目录下的Assets\Plugins\Android。
3.在unity项目目录下的Assets\Plugins\Android中新建libs目录,把GoogleAdMobAdsSdk-4.1.0.jar拷贝到libs目录中。
4.在unity3d程序里可以看到。
5.用unity3d Build android 安装包。
6.把安装包放到虚拟机或真机上运行。
希望可以帮助到你,更多unity,就在纳金论坛。

如何提高Unity3d编译安卓apk的速度

分成二步untiy导出android工程,用android工具编译出apk .到底是你生成工程慢?还是编译apk慢?
unity一般是处理resource下资源慢,编译一般是streamassets下文件多zip慢

OK,关于androidunity3d教程和Unity3D游戏版本更新怎么做的内容到此结束了,希望对大家有所帮助。

androidunity3d教程(Unity3D游戏版本更新怎么做)

本文编辑:admin

更多文章:


collects(collect怎么读)

collects(collect怎么读)

大家好,今天小编来为大家解答以下的问题,关于collects,collect怎么读这个很多人还不知道,现在让我们一起来看看吧!

2026年11月2日 21:10

四舍五入用哪个函数(用于进行四舍五入的数学函数是以下哪一项)

四舍五入用哪个函数(用于进行四舍五入的数学函数是以下哪一项)

各位老铁们,大家好,今天由我来为大家分享四舍五入用哪个函数,以及用于进行四舍五入的数学函数是以下哪一项的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年11月2日 20:10

手机excel表格制作(手机上怎么做表格)

手机excel表格制作(手机上怎么做表格)

各位老铁们,大家好,今天由我来为大家分享手机excel表格制作,以及手机上怎么做表格的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年11月2日 20:00

单片机unsigned什么意思(为什么单片机编程变量都要定义成unsigned)

单片机unsigned什么意思(为什么单片机编程变量都要定义成unsigned)

这篇文章给大家聊聊关于单片机unsigned什么意思,以及为什么单片机编程变量都要定义成unsigned对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年11月2日 19:30

java编程俄罗斯方块(求java编的俄罗斯方块代码! 最好是网络版的!单机版的也好啊!谢谢诶啊)

java编程俄罗斯方块(求java编的俄罗斯方块代码! 最好是网络版的!单机版的也好啊!谢谢诶啊)

本篇文章给大家谈谈java编程俄罗斯方块,以及求java编的俄罗斯方块代码! 最好是网络版的!单机版的也好啊!谢谢诶啊对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年11月2日 18:20

js数组快速排序法(JS中的各种排序方法)

js数组快速排序法(JS中的各种排序方法)

本篇文章给大家谈谈js数组快速排序法,以及JS中的各种排序方法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年11月2日 16:20

sql更新某一列的值(sql server2000 如何向表中逐条更新某一列的值,各行值通过随机数产生)

sql更新某一列的值(sql server2000 如何向表中逐条更新某一列的值,各行值通过随机数产生)

本篇文章给大家谈谈sql更新某一列的值,以及sql server2000 如何向表中逐条更新某一列的值,各行值通过随机数产生对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问

2026年11月2日 16:10

属性与生活3下载安装(属性与生活3租房阶段攻略)

属性与生活3下载安装(属性与生活3租房阶段攻略)

各位老铁们好,相信很多人对属性与生活3下载安装都不是特别的了解,因此呢,今天就来为大家分享下关于属性与生活3下载安装以及属性与生活3租房阶段攻略的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年11月2日 15:00

grep 上下文(word搜索显示上下文软件开发)

grep 上下文(word搜索显示上下文软件开发)

今天给各位分享word搜索显示上下文软件开发的知识,其中也会对word搜索显示上下文软件开发进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年11月2日 14:20

spring怎么读多个文件(怎样加载多个Spring bean 配置文件)

spring怎么读多个文件(怎样加载多个Spring bean 配置文件)

今天给各位分享怎样加载多个Spring bean 配置文件的知识,其中也会对怎样加载多个Spring bean 配置文件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年11月2日 13:50

最近更新

键盘按键测试(有哪些测试键盘)
2026-11-02 22:20:28 浏览:0
collects(collect怎么读)
2026-11-02 21:10:07 浏览:0
热门文章

新站如何通过网站维护提升SEO排名
2026-10-13 20:56:21 浏览:6
sql server2008下载地址(如何下载SQL Server 2008 R2 SP2免费版)
2026-10-05 05:30:29 浏览:6
标签列表