dayglow 2022-06-05 00:15 采纳率: 33.3%
浏览 141

unity 2D利用json如何存储场景中角色的位置

在利用json存档时想存场景中player的位置和enemy的位置。我给player和enemy分别给了不同的标签,怎么样能在场景里读取该标签的位置
using System.Collections;

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class Save
{
public List livingEnermyPositions = new List();
public List livingPlayerPositions = new List();
public List sceneNums = new List();
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using LitJson;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
public static GameManager _instance;
public GameObject[] enemys;
public GameObject[] player;
public GameObject[] scenes;
private void Resume()
{
_instance = this;
Pause();
}
void Update()
{
private Save CreateSaveGo()
{
Save save = new Save();

        return save;
    }
    private void SetGame(Save save)
    {

    }


    //Json:存档
    private void SaveByJson()
    {
        Save save = CreateSaveGo();
        string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json";
        //利用JsonMapper将save对象转换为Json格式的字符串
        string saveJsonStr = JsonMapper.ToJson(save);
        //将这个字符串写入到文件中
        //创建一个StreamWriter,将字符写入到文件中
        StreamWriter sw = new StreamWriter(filePath);
        sw.Write(saveJsonStr);
        //关闭StreamWriter
        sw.Close();
        if (File.Exists(Application.dataPath + "/StreamingFile" + "/byJson.json"))
        {
            pauseMenuUI.ShowMessage("Saved");
        }
    }
    //Json:读档
    private void LoadByJson()
    {
        string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json";
        if (File.Exists(filePath))
        {
            //创建一个StreamReader,用来读取流
            StreamReader sr = new StreamReader(filePath);
            //将读取到的流赋值给string类型的jsonstr
            string jsonstr = sr.ReadToEnd();
            //关闭流
            sr.Close();
            //将字符串jsonstr转换为save对象
            Save save = JsonMapper.ToObject<Save>(jsonstr);
            SetGame(save);
        }
        else
        {
            pauseMenuUI.ShowMessage("Missing");
        }
    }
}

public void SaveGame()
{
    SaveByJson();
}
public void LoadGame()
{
    LoadByJson();
}

}

通过绑定该代码实现在ui界面保存加载游戏
  • 写回答

1条回答 默认 最新

  • 周周的Unity小屋 Unity3D领域优质创作者 2022-06-05 02:39
    关注

    如果你想要查找标的方法的话,可以这么写:

    
    GameObject player = GameObject.FindGameObjectWithTag("Player的标签名");
    string pos=player.transform.position.ToString();//得到player的坐标字符串---(x,y,z)格式的字符串
    

    其实你也可以不用,你不是已经用数组保存了Player和enemy了吗,你可以直接获取你数组下某个下标的游戏对象的坐标保存就可以了,比如enemys[0].transform.position,就表示数组里第一个敌人的坐标,将其转为字符串保存到你的json文件就行

    评论

报告相同问题?

问题事件

  • 创建了问题 6月5日

悬赏问题

  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥50 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大
  • ¥15 使用spss做psm(倾向性评分匹配)遇到问题
  • ¥20 vue+UEditor附件上传问题
  • ¥15 想做个WPS的自动化代码,不知道能做的起不。