将unity中相机位置保存为json 文件或者 发送给后端

server/2025/1/16 0:03:24/

unity_0">将unity中相机位置保存保存到服务器

///相机的位置public Transform cameraTransform;void Start(){// SaveCameraPosition("sd");// ("{\"name\":\"sd\",\"position\":\"(0.00, 5.00, -12.00)\",\"rotation\":\"(25.00, 0.00, 0.00)\"});}///保存数据public void SaveCameraPosition(string viewname){if (!string.IsNullOrEmpty(viewname)){CameraView cameraView = new CameraView();cameraView.name = viewname;cameraView.position = cameraTransform.position.ToString();cameraView.rotation = cameraTransform.rotation.eulerAngles.ToString();string oko = JsonUtility.ToJson(cameraView);Application.ExternalCall("ReciveViwe", oko.ToString()) ;}}///解析数据public void ParsingCameraViewdata(string json){CameraView jsonData = JsonMapper.ToObject<CameraView>(json);Debug.Log("pos:"+jsonData.position+"rot:"+ jsonData.rotation);Vector3 po = StringToVector3(jsonData.position);Vector3 ro = StringToVector3(jsonData.rotation);MaxCamera.instance_.ModelMove(po, Quaternion.Euler(ro.x, ro.y, 0), 0.5f);//  GameManager.Instance.SettingCamera(po, ro);}// 字符串转为 v3public Vector3 StringToVector3(string sVector){// 移除字符串中的括号if (sVector.StartsWith("(") && sVector.EndsWith(")")){sVector = sVector.Substring(1, sVector.Length - 2);}// 拆分字符串为单独的值string[] sArray = sVector.Split(',');// 创建Vector3并返回return new Vector3(float.Parse(sArray[0]),float.Parse(sArray[1]),float.Parse(sArray[2]));}public class CameraView{public string name;public string position;public string rotation;}

json_58">将相机位置保存为json

using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
/// <summary>
/// 保存数据为json
/// </summary>
public class CameraSaveLoad : MonoSingleton<CameraSaveLoad>
{public Transform cameraTransform; // 相机的Transform组件public string saveFileName = "camera_view.json"; // 保存文件的名称public InputField viewNameInput; // 用于输入视角名称的UI InputFieldpublic Button surebtn;public Dictionary<string, CameraView> CamerViewDic = new Dictionary<string, CameraView>();// Start is called before the first frame updatevoid Start(){LoadDeviceDic();surebtn.onClick.AddListener(SaveCameraPosition);}public class CameraView{public string name;public string position;public string rotation;}/// <summary>/// 解析数据 字符串转v3/// </summary>/// <param name="sVector"></param>/// <returns></returns>public Vector3 StringToVector3(string sVector){// 移除字符串中的括号if (sVector.StartsWith("(") && sVector.EndsWith(")")){sVector = sVector.Substring(1, sVector.Length - 2);}// 拆分字符串为单独的值string[] sArray = sVector.Split(',');// 创建Vector3并返回return new Vector3(float.Parse(sArray[0]),float.Parse(sArray[1]),float.Parse(sArray[2]));}public void SaveCameraPosition(){string viewName = viewNameInput.text;if (!string.IsNullOrEmpty(viewName)){CameraView cameraView = new CameraView{name = viewName,position = cameraTransform.position.ToString(),rotation = cameraTransform.rotation.eulerAngles.ToString()};AddCameratrToDic(viewName, cameraView);}}
/// 将数据保存为jsonpublic void AddCameratrToDic(string viewname, CameraView viewdate){if (!CamerViewDic.ContainsKey(viewname)){CamerViewDic.Add(viewname, viewdate);SaveCamerViewDicTojson(CamerViewDic);}else{CamerViewDic[viewname] = viewdate;SaveCamerViewDicTojson(CamerViewDic);}}public void Delel(){// string filePath = Path.Combine(Application.streamingAssetsPath, "example.txt");string filePath = Path.Combine(Application.persistentDataPath, "camera_view.json");// 检查文件是否存在if (File.Exists(filePath)){File.Delete(filePath);Debug.Log("文件已删除:" + filePath);}}public void SaveCamerViewDicTojson(Dictionary<string, CameraView> valuePairs){JsonData jsonData = JsonMapper.ToJson(valuePairs);Regex reg = new Regex(@"(?i)\\[uU]([0-9a-f]{4})");var ss = reg.Replace(jsonData.ToString(), delegate (Match m) { return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString(); });string filePath = Path.Combine(Application.streamingAssetsPath, "camera_view.json");File.WriteAllText(filePath, jsonData.ToString());Debug.Log("Dictionary data saved to: " + filePath);}public void LoadDeviceDic(){string filePath = Path.Combine(Application.streamingAssetsPath, "camera_view.json");//var uri = new System.Uri(Path.Combine(Application.streamingAssetsPath, "camera_view.json"));//UnityWebRequest request = UnityWebRequest.Get(uri);//yield return request.SendWebRequest();//if (request.isNetworkError)//{//    Debug.Log(request.error);//}//else//{//    string jsonStr = request.downloadHandler.text;//    CamerViewDic = JsonMapper.ToObject<Dictionary<string, CameraView>>(jsonStr);//    foreach (var pair in CamerViewDic)//    {//        Vector3 po = StringToVector3(pair.Value.position);//        Debug.LogError("po" + po.ToString());//        Debug.Log("Key: " + pair.Key + ", Value: " + pair.Value + ", " + pair.Value);//    }//} 检查文件是否存在if (File.Exists(filePath)){// 从文件中读取 JSON 数据string json = File.ReadAllText(filePath);// 将 JSON 数据转换为字典CamerViewDic = JsonMapper.ToObject<Dictionary<string, CameraView>>(json);Debug.Log("Dictionary data loaded from: " + filePath);// 示例:输出加载的数据foreach (var pair in CamerViewDic){Vector3 po = StringToVector3(pair.Value.position);//  Debug.LogError("po" + po.ToString());Debug.Log("Key: " + pair.Key + ", Value: " + pair.Value + ", " + pair.Value);}}else{Debug.LogError("Dictionary data file not found!");}// DeviceManager.GetInstance().myDictionary;}}

http://www.ppmy.cn/server/38242.html

相关文章

C#面:C# 是否可以对内存直接进行操作

在C#中&#xff0c;可以通过使用指针来对内存进行直接操作。 使用 unsafe 关键字来支持指针操作&#xff0c;并且需要在项目属性中启用选项&#xff1a;允许不安全代码。使用指针可以绕过 C# 的类型安全检查&#xff0c;因此需要谨慎使用&#xff0c;并且只有在必要的情况下才…

C++怎样产生随机数

C怎样产生随机数? 这里要用到的是 rand() 函数和 srand() 函数 rand() 会返回一随机数值, 范围在 0 至 RAND_MAX ,RAND_MAX 定义在 stdlib.h, 其值根据系统配置设定 例如&#xff1a; #include<stdio.h> #include<stdlib.h> int main() {for(int i0;i<10;i)…

读书笔记——《高质量C++/C编程指南》(2)

目录 前言 命名规则 共性规则 简单的Windows应用程序命名规则 表达式和基本语句 运算符优先级 复合表达式 if语句 布尔变量与零值比较 整型变量与零值比较 浮点变量与零值比较 指针变量与零值比较 对if 语句的补充说明 循环语句的效率 for 语句的循环控制变量 s…

LeetCode 每日一题 ---- 【1463.摘樱桃 II】

LeetCode 每日一题 ---- 【1463.摘樱桃 II】 1463.摘樱桃II方法&#xff1a;动态规划&#xff08;递推&#xff09; 1463.摘樱桃II 方法&#xff1a;动态规划&#xff08;递推&#xff09; 昨天是摘樱桃I&#xff0c;今天是II&#xff0c;与昨天的区别主要在于&#xff0c;今…

uniapp+vue基于移动端的药品进销存系统r275i

最后我们通过需求分析、测试调整&#xff0c;与药品进销存管理系统管理系统的实际需求相结合&#xff0c;设计实现了药品进销存管理系统管理系统。 系统功能需求包含业务需求、功能需求用户需求&#xff0c;系统功能需求分析是在了解用户习惯、开发人员技术和实力等各个因素的前…

写一个函数返回参数二进制中1的个数--四种方法及原理解释

虽然本方法是java写的&#xff0c;但是其原理适用于大部分语言 方法一&#xff1a;通过取模%运算取出每一位比特位数值&#xff0c;再进行判断&#xff08;该方法不可判断负数&#xff09; 原理&#xff1a; 通过取模num % 2 1 取出该数的每一个二进制位数&#xff0c;再判…

Android OpenMAX(四)OMX Core

假设我们已经写好了所有的OMX组件,有vdec、venc、adec、aenc,接下来问题来了,我们应该如何管理这些组件呢(创建、销毁)?这一篇文章我们向上一层学习OMX Core提供的标准API。 OMX Core代码位于 OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL Client与实际的OMX组件之…

uniapp 如何修改 IPA 文件信息页的本地化语言

实现效果&#xff1a; 最终会对应到苹果商店的语言&#xff1a; 例如微信的语言就有多个&#xff1a; 操作&#xff1a; 在 mainfest.json 源码视图中加入&#xff1a; 具体对应的语言key值可以参考Xcode中的语言代码 这个取决于打包后的 lproj 文件 将后缀ipa改成zip打开即…