當前位置:首頁 » 存儲配置 » unity中數組的存儲

unity中數組的存儲

發布時間: 2022-08-02 18:29:54

1. unity中游戲裝備數據怎麼 建立,存儲和讀取

感覺你的問題應該有更直接的辦法,一是不太懂你的意思,比如你具體是要實現怎樣的功能?為什麼要根據XY計算,難道同樣的裝備隨機次數不同,power計算也不同? 第一、第二個裝備又是什麼意思?理論上應該限定總的可裝備上限,比如一共就可以裝備三個東西,那麼你自然需要定義一個三個元素的數組了。如果每個裝備名稱對應的xy是固定的話,計算power似乎沒意義了,還不如把power參數和裝備寫在一起,而你只要隨機xy來取不同裝備就行了吧。

以下順帶講一下寫入數據的辦法。
(不好意思我用的是JS,語法上轉換一下就行了。)

不用playerprefs的方法是:
新建一個類,這個類裡面定義你要儲存在磁碟上的變數,最後把這個類寫成*.dat文件(binary文件),這樣這個類里的數據就寫在磁碟上了,以後你就可以隨時調取、更新所存儲的數據了。

(1)編程時你要用到幾個基本的包:
import System;
import System.Runtime.Serialization.Formatters.Binary; //用來寫binary文件
import System.IO; //基本的輸入輸出

詳細的你還可以去查.net 的MSDN 參考。

(2)你要自定義一個類用來規定數據,比如:
Class GameData {
var itemID:int;
var power:float;
}

(3)你還需要一個實例化的腳本(比如命名成,GameDataManager ),把這個腳本放在一個場景中GameObject上就可以了,這個腳本用來實際操作讀取和寫入。把這個類做成一個Singleton,就是說僅在整個游戲剛啟動時初始化一個靜態的實例,而且在此後的場景退出時都不要清除,這樣可以避免反復覆蓋讀取和存儲數據的風險。比如:
static var instance:GameDataManager;

Awake() {
if(instance == null){ //當前場景中沒有其他實例化的腳本,
DontDestroyOnLoad(gameObject); //那麼說現在本腳本是唯一的實例,所以不要銷毀
instance = this; //把唯一的靜態指針指向自己。
}else if(instance != this){
Destroy(gameObject); //當前場景中已經有了其它實例!說本腳本是重復的實例,銷毀!
}
}

(4)接下來要判斷是否已經存在先前的存檔binary文件,如果沒有,就需要初始化一個GameData類。

var myGameData:GameData;

function Start () {

myGameData= Load(); //此處Load()是腳本後面定義的一個讀取binary文件.Dat的方法
if(myGameData== null){ // 如果沒有讀取到文件,就初始化一個新的數據類
myGameData= new GameData();
myGameData.power= 999; // 數據初始化,這里你可以自定義更復雜的方法或演算法
Save(); //寫入數據,此處Save()也是後面定義的一個存儲binary文件.Dat的方法
}
}

(5)具體完成Load() 和 Save()方法:
function Save (){
var bFile:BinaryFormatter;
var file:FileStream;

bFile = new BinaryFormatter();
file = File.Create(Application.persistentDataPath + "/GameData.dat"); //在系統默認應用程序路徑創建.Dat文件

bFile.Serialize(file, currentGameData); // 寫入數據
file.Close(); //完成文件
}

function Load ():GameData{
var bFile:BinaryFormatter;
var file:FileStream;
var loadData:GameData;

if(File.Exists(Application.persistentDataPath + "/GameData.dat")){//判斷.dat文件是否存在
bFile = new BinaryFormatter();
file = File.Open(Application.persistentDataPath +"/GameData.dat", FileMode.Open);//打開系統默認路徑中的.Dat文件

loadData = bFile.Deserialize(file) as GameData; //獲取讀取到的數據

file.Close();//關閉文件

}

return loadData; //返回獲取到的數據類
}

最後,如果你英文過的去,unity的官方網站上有全套視頻,其中一個章節就是講解如何存儲數據的!不過前提是你得會 夫安 七一昂,否則視頻可能看不了。今年封的更嚴了,國情你懂的,

2. C#中數組,ArrayList和List三者的區別Unity3d

1、ArrayList類是一個特殊的數組。它來自於System.Collections命名空間;通過添加和刪除元素,就可以動態改變數組的長度。

3. unity3d 塔防尋路,用一個數組存下坐標,用C# 應該怎麼樣實現

Transfrom[]
Vector3[]
這樣就是數組了

4. 在unity中javascript的模擬二維數組問題,為什麼 總是出現這個錯誤Type 'Object' does not support slicing

jxl讀取excel代碼:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class ExcelImporter
{
/**
* @Function //函數、方法名稱
* @Description //測試excell表格
* @Input //輸入參數的說明
* @Output //輸出參數的說明
* @Return //函數返回值的說明
* @Others //其它說明
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
List<String> list = new ArrayList<String>();
String filePath = "C:/sinye.xls";
InputStream fs = null;
Workbook workBook = null;

try {
// 載入excel文件
fs = new FileInputStream(filePath);
// 得到 workbook
workBook = Workbook.getWorkbook(fs);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

// 取得sheet,如果你的workbook里有多個sheet 可以利用 wb.getSheets()方法來得到所有的。
// getSheets() 方法返回 Sheet[] 數組 然後利用數組來操作。就是多次循環的事。
Sheet sheet = workBook.getSheet(0);//這里只取得第一個sheet的值,默認從0開始
System.out.println(sheet.getColumns());//查看sheet的列
System.out.println(sheet.getRows());//查看sheet的行
Cell cell = null;//就是單個單元格
// 開始循環,取得 cell 里的內容,這里都是按String來取的 為了省事,具體你自己可以按實際類型來取。或者都按
// String來取。然後根據你需要強制轉換一下。
for (int j = 0; j < sheet.getColumns(); j++) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < sheet.getRows(); i++) {
cell = sheet.getCell(j, i);
sb.append(cell.getContents());
sb.append(",");//將單元格的每行內容用逗號隔開
}
list.add(sb.toString());//將每行的字元串用一個String類型的集合保存。
}
workBook.close();//記得關閉

//迭代集合查看每行的數據
for(String ss:list){
System.out.println(ss);
}
}
}
接下來,就是寫excel了,見代碼:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class JxlWriteExcel {

/**
* @param datas 封裝著Object[]的列表, 一般是String內容.
* @param title 每個sheet里的標題.
*/
public void writeExcel(OutputStream out, List list, String[] title) {
if(list == null) {
throw new IllegalArgumentException("要寫入excel的數據不能為空!");
}
try {
WritableWorkbook workbook = Workbook.createWorkbook(out);
WritableSheet ws = workbook.createSheet("sheet 1", 0);//創建sheet
int rowNum = 0; //要寫的行,jxl操作excel時,第一行是從0開始,以此類推
if(title != null) {
putRow(ws, 0, title);//壓入標題
rowNum = 1;
}
for(int i=0; i<list.size(); i++, rowNum++) {//寫sheet
Object[] cells = (Object[]) list.get(i);
putRow(ws, rowNum, cells); //壓一行到sheet
}
workbook.write();
workbook.close(); //一定要關閉, 否則沒有保存Excel
} catch (RowsExceededException e) {
System.out.println("jxl write RowsExceededException: "+e.getMessage());
} catch (WriteException e) {
System.out.println("jxl write WriteException: "+e.getMessage());
} catch (IOException e) {
System.out.println("jxl write file i/o exception!, cause by: "+e.getMessage());
}
}
private void putRow(WritableSheet ws, int rowNum, Object[] cells) throws RowsExceededException, WriteException {
for(int j=0; j<cells.length; j++) {//寫一行
Label cell = new Label(j, rowNum, ""+cells[j]);
ws.addCell(cell);
}
}

}
調用寫excel的測試代碼
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList();
//組裝寫入excel的數據
for(int i=0;i<10;i++){
String[] data = {"開心"+i,"2"+i};
list.add(data);
}
try {
OutputStream out = new FileOutputStream(new File("c:\\sinye.xls"));
JxlWriteExcel jxlExcelWriter = new JxlWriteExcel();
jxlExcelWriter.writeExcel(out, list, new String[] {"姓名", "年齡"});
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

5. unity3d,怎麼吧很多對象存儲到一個數組裡面,在用到的時候隨機選擇一個.

用一個list來裝對象就行了,隨機就用c#的隨機函數

6. unity 傳遞數組是值傳遞還是引用

unity 傳遞數組是值傳遞.
值傳遞:(形式參數類型是基本數據類型):方法調用時,實際參數把它的值傳遞給對應的形式參數,形式參數只是用實際參數的值初始化自己的存儲單元內容,是兩個不同的存儲單元,所以方法執行中形式參數值的改變不影響實際參數的值。
引用傳遞:(形式參數類型是引用數據類型參數):也稱為傳地址。方法調用時,實際參數是對象(或數組),這時實際參數與形式參數指向同一個地址,在方法執行中,對形式參數的操作實際上就是對實際參數的操作,這個結果在方法結束後被保留了下來,所以方法執行中形式參數的改變將會影響實際參數。

7. unity3d 如何把對象放進數組

1.創建Unity3d工程,新建C#腳本,名稱自擬。

8. unity中 數組 和 List 的使用 內存是怎樣變化的

數組,只能放int類型的元素,並且必須定長度 例如:int[] T=new int[5]; 只能放int,並且長度不能超過5 ArrayList-->集合的一種,其中可以放任何類型,不受限制,長度可變,自增加長度 例如:ArrayList AR=new ArrayList()

9. Unity3D中,如何把圖像文件保存為數組並通過輸入鍵盤信息調用

在unity工程的Assets目錄下創建Resources目錄,將圖片按照一定的格式命名放在該目錄下,比如說plane1的貼圖名稱為1_0001,1_0002等
然後寫一個更新貼圖的腳本
public class ChangeTex:MonoBehivour
{
private string m_id = "";
internal void OnGUI()
{
GUILayout.Label("ID");
m_id = GUILayout.TextField(m_id);
if (GUILayout.Button("Change"))
{
renderer.material.mainTexture = (Texture2D)Resources.Load(m_id);
}
}
}
將該腳本拖到plane1上面即可看到gui,輸入對應的貼圖名稱,點擊Change按鈕就可以變化貼圖了,當然,這個首先要保證這個plane已經有一個空白材質球,以上代碼只是思路,不一定能夠成功運行,請適當修改

10. u3D中怎麼把場景中的Sprite存到數組里

單個就用名字查找(gameobject。find)然後加到數組里,多個就給精靈加標簽,用gameobject。FindGameObjectsWithTag,這個方法會直接把找到的結果存成數組

熱點內容
安卓如何遠程簽到 發布:2024-10-05 14:11:11 瀏覽:299
阿里雲伺服器控制面板 發布:2024-10-05 13:57:48 瀏覽:816
涉法涉訴信訪問題意見 發布:2024-10-05 13:56:23 瀏覽:893
華為路由器配置導出的方法有哪些 發布:2024-10-05 13:55:36 瀏覽:161
我的世界好玩伺服器拍視頻 發布:2024-10-05 13:23:19 瀏覽:553
穿越火線掛機腳本 發布:2024-10-05 13:05:44 瀏覽:33
分解質因數c語言 發布:2024-10-05 12:15:53 瀏覽:779
mysql存儲過程字元編碼 發布:2024-10-05 12:05:48 瀏覽:184
c語言命名 發布:2024-10-05 11:56:38 瀏覽:617
編程哪個好學習 發布:2024-10-05 11:50:59 瀏覽:1000