当前位置:首页 » 存储配置 » 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,这个方法会直接把找到的结果存成数组

热点内容
c可以用来编译系统软件吗 发布:2024-10-05 16:22:26 浏览:17
U盘和存储器 发布:2024-10-05 16:22:04 浏览:896
cmdc语言 发布:2024-10-05 15:58:32 浏览:550
服务器怎么弄公网ip 发布:2024-10-05 15:57:02 浏览:640
设备配置在什么地方 发布:2024-10-05 15:44:59 浏览:249
matlab外部接口编程 发布:2024-10-05 15:36:58 浏览:365
C事件编程 发布:2024-10-05 15:15:43 浏览:639
一台服务器出现两IP 发布:2024-10-05 15:10:05 浏览:925
md5加密算法c 发布:2024-10-05 15:05:40 浏览:761
如何重设控制器密码 发布:2024-10-05 14:19:13 浏览:441