❶ 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+"");
}
public void StartLoad(String httpUrl, String apkName)
{
mDownloadAsyncTask = new AsyncTaskUtil(MainActivity.this, mHandler);
mDownloadAsyncTask.execute(httpUrl, apkName);//必須傳入兩個參數——參數1:url;參數2:文件名(可以為null)
}
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[0]為url,params[1]為文件名(空則寫入null)
@Override
protected Boolean doInBackground(String... params) {
//任務定時器一定要啟動
mTimer.schele(mTask, 0, 500);
try {
mUrl = params[0];
//建立鏈接
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[1] != null){
fileName = params[1];
} else{
fileName = getFileName(params[0]);
}
//文件輸出流
FileOutputStream fos = new FileOutputStream(new File(getFolderPath()
+ fileName));
byte[] buff = new byte[1024];
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();
}
}
❷ 光遇更新後腳本要更新嗎
要的。
更新後一些設定也不一樣了,腳本要同步才能使用。
《光·遇》是由游戲製作人陳星漢及其團隊Thatgamecompany開發的社交冒險游戲,國內由網易游戲代理運營。該作於2019年6月21日在App Store發行 ,2020年7月9日在安卓平台正式上線 ,2021年6月登陸Switch 。
在游戲中,玩家將化身「光之後裔」,承載著先祖的意志,與好友攜手,在天空王國的奇妙大陸上,展開一場充滿奇遇的冒險 。
❸ 腳本要怎麼更新
游戲的更新文件包含需要更新的全部內容,腳本不是更不更新就不能用,10年前的某個腳本到現在不更新照樣能夠正常運行腳本命令.建議你還是去查查相關的資料,一款游戲的內部腳本一般是不會進行頻繁的修改,除非游戲新增功能.更新文件中包含需要更新的全部內容,他們的工程師可不會愚蠢到游戲在腳本上出現錯誤
滿意請採納
❹ 最近腳本問題,如何更新腳本
1.右擊IE圖標——屬性——高級——選中「禁用腳本調試」,取消「顯示每個腳本錯誤的通知」; 2.右擊我的電腦圖標——屬性——高級——錯誤報告——選中「禁用錯誤報告」。
❺ 魔獸世界更新了,我的插件怎麼更新
單體插件如果總是出錯誤提示,就暫時在人物選擇畫面的插件控制關掉它,過兩天版本更新好了再更新使用。
❻ 炫舞更新後原來盤里有全P腳本能更新嗎那個盤的游戲還能玩嗎
如果你的那個是綁定在客戶端上的,那麼游戲更新版本了,你的那個就不能玩了,必須重新安裝客戶端,然後更新好後,在來安裝全P的,才可以
❼ ps4怎麼用腳本
在PS4上玩電子游戲非常有趣,但開發者有時需要修復游戲中的漏洞和小故障。幸運的是,更新PS4游戲很容易。最方便的方法是設置自動下載,允許游戲在後台或PS4處於待命模式時進行更新。另外,你也可以手動更新游戲,方法是選擇你感興趣的游戲,然後下載並安裝更新。
設置自動更新分步閱讀
1
/8
按手柄上的中間按鈕,打開PS4。如果你看到一個額外的界面,提示你再次按下按鈕,請按提示操作。在下一個界面上選擇你的用戶信息,你會被詢問「誰在使用這個手柄?」然後,按「X」按鈕。
2
/8
按下手柄並滾動到「設置」界面。設置按鈕是橙色白色相間的,白色圓圈中有一個工具箱徽標。你可以在電源選項和獎杯菜單選項之間找到它。使用D-pad或左手拇指來導航到設置菜單選項,然後按下手柄上的「X」來訪問它
3
/8
向下滾動菜單選項至「系統」。「系統」選項介於「協助工具」和「初始化」之間。按手柄上的「X」按鈕來訪問它。
4
/8
向下滾動到「自動下載/上傳」。這個菜單選項是從頂部起第二個,位於「系統信息」和「語音操作設置」之間。按手柄上的「X」鍵來訪問它。
5
/8
在「應用程序更新文件」旁邊打勾。向下滾動到「應用程序更新文件」後,按手柄上的「X」按鈕,就可以激活游戲和應用程序的自動下載。「應用程序更新文件」選項位於「已保存的數據」和「自動安裝」選項之間。
6
/8
導航到「電源設置」菜單。在手柄上按兩次「O」,回到「設置」菜單界面,然後向下滾動到「電源設置」選項。這個菜單選項旁邊有一個白色的小圖標,形狀是兩只手托起一塊電池。在手柄上按「X」,滾動到菜單後就可以訪問它。
7
/8
設置待命模式里的功能。選擇第二個菜單選項「設定待命模式里的功能」。這樣在PS4處於待命模式時,游戲也可以進行更新。如果你是Remote Play 用戶,還應該選擇「開啟從網路打開PS4」。
8
/8
關掉電源之前,將PS4設置為待命模式。按住手柄的中間按鈕,然後使用D-pad或左手拇指向下滾動到「電源」選項。向下滾動,然後選擇「將PS4設定為待命模式」。
手動更新游戲
1
/4
在主菜單中選擇要更新的應用程序。打開PS4並訪問你的帳戶後,使用D-pad或左手拇指導航到你想更新的游戲。
2
/4
通過選項菜單檢查更新。當你想要更新的游戲被選中時,按手柄上的選項按鈕。向下滾動到彈出的菜單中的「檢查更新」選項。
3
/4
如果游戲已經准備好更新,直接去下載。如果有可用的更新,你會收到一個通知:「此應用程序的更新文件可用。」然後你就會進入下載界面。按手柄上的「X」鍵進入界面。
如果游戲不需要更新,PS4會通知你的。
4
/4
選擇游戲並開始下載。在下載界面上,你會看到一個完整的列表,裡面列出了你的應用程序和游戲的所有更新。在手柄上按「X」鍵選擇要更新的游戲,然後確認是否要更新游戲。
更新需要時間。安裝所需的時間取決於更新文件的大小。
安裝更新時,你也可以玩游戲。
注意事項
tips:如果系統沒有聯網,你將無法更新PS4游戲。
❽ 為什麼游戲更新腳本就得更新這是為什麼
不知道你說的腳本是指的游戲本身內置的腳本,還是類似外外掛輔助的這種。但通常來說,游戲更新之後,腳本所對應的某些數據可能就發生了變化,所以腳本需要更新是正常的。
舉例說,如果腳本里調用游戲角色血量,假設原來是內存的222222位置,但更新後變成3333333位置,這種情況下,如果腳本還是讀原來的位置,無疑會出錯。