当前位置: 首页 > news >正文

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

将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

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;}}

相关文章:

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

将unity中相机位置保存保存到服务器 ///相机的位置public Transform cameraTransform;void Start(){// SaveCameraPosition("sd");// ("{\"name\":\"sd\",\"position\":\"(0.00, 5.00, -12.00)\",\"rotation\&qu…...

vue2-表单组件封装

创建组件 components/test/index.vue <template><el-form :model"formData">// <!-- 具名插槽 --><slot name"header" /><el-form-itemv-for"(item, index) in formItem":key"index":label"item.la…...

智能家居4 -- 添加接收消息的初步处理

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 receive_interface.c #include <pthread.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <…...

Python selenium

1.搭建环境 1.安装&#xff1a; pip install msedge-selenium-tools 不要使用pip install selenium&#xff0c;我的电脑上没法运行 2.下载驱动 Microsoft Edge WebDriver |Microsoft Edge 开发人员 edge浏览器点设置---关于即可找到版本号&#xff0c;一定要下载对应版…...

Python内置函数next()详解

Python的next()函数是一个内置函数&#xff0c;用于从迭代器中获取下一个元素。如果迭代器耗尽&#xff0c;则抛出StopIteration异常。 函数定义 next()函数的基本语法如下&#xff1a; next(iterator[, default])iterator&#xff1a;一个迭代器对象。default&#xff1a;可…...

初识指针(1)<C语言>

前言 指针是C语言中比较难的一部分&#xff0c;大部分同学对于此部分容易产生“畏难情结”&#xff0c;但是学习好这部分对C语言的深入很大的帮助&#xff0c;所以此篇主要以讲解指针基础为主。 指针概念 变量创建的本质就是在内存中申请空间&#xff0c;找到这个变量就需要地址…...

uniapp使用vconsole调试 兼容App

前言&#xff1a;引入vconsole发现uniapp打出来的包里&#xff0c;看不到vconsole&#xff0c;uniapp开发的h5需要使用vconsole真机调试&#xff0c;如果直接在main.ts引入&#xff0c;打包后整个项目会页面空白&#xff0c;经实验在单个页面引入可解决&#xff0c;以下是解决方…...

论文笔记模版

1. 摘要 1.1 背景 1.2 挑战 1.3 提出新方法 1.4 贡献 2. 引言 2.1 背景&#xff08;引出问题&#xff09; ①介绍大背景&#xff1a; ② 应用场景&#xff1a; ③ 介绍主题&#xff1a; 2.2 引出挑战 一般用图表来展现出我们的挑战&#xff08;直观&#xff0c;解决什…...

docker-本地私有仓库、harbor私有仓库部署与管理

一、本地私有仓库&#xff1a; 1、本地私有仓库简介&#xff1a; docker本地仓库&#xff0c;存放镜像&#xff0c;本地的机器上传和下载&#xff0c;pull/push。 使用私有仓库有许多优点&#xff1a; 节省网络带宽&#xff0c;针对于每个镜像不用每个人都去中央仓库上面去下…...

【Go 语言入门专栏】Go 语言的起源与发展

前言 Go 语言是当下最为流行的编程语言之一&#xff0c;大约在 2020、2021 年左右开始于国内盛行&#xff0c;许多大厂很早就将部分 Java 项目迁移到了 Go&#xff0c;足可看出其在性能方面的优越性。 相信各位都知道&#xff0c;在爬虫业务中&#xff0c;并发是一个关键的需…...

发电机组远程管理,提升管控力,降低运维成本

发电机组是指发电机发动机以及控制系统的总称&#xff0c;用来把发动机提供的动能转化为电能。它通常由动力系统、控制系统、消音系统、减震系统、排气系统组成。发电机组远程管理系统利用物联网技术与PLC远程控制模块集成解决方案&#xff0c;在提高发电机组的运行效率、降低运…...

java将文件压缩打包后进行下载

今天受到一个需求&#xff0c;需要查出文件&#xff0c;然后将文件打包后下载。看了下项目里默认代码有压缩功能&#xff0c;以此修改了下&#xff0c;项目使用了hutool。项目是若依项目 定义zip的数据传输对象&#xff0c;ossId可以是文件表的id Data public class SysOssZi…...

【4/26-4/30】 Arxiv安全类文章速览

4/26 标题: Merchants of Vulnerabilities: How Bug Bounty Programs Benefit Software Vendors 作者: Esther Gal-Or, Muhammad Zia Hydari, Rahul Telang摘要: 软件漏洞允许恶意黑客利用&#xff0c;威胁系统和数据安全。本文研究了激励道德黑客发现并负责任地向软件供应商披…...

活动图与状态图:UML中流程图的精细化表达——专业解析系统动态性与状态变迁

流程图是一种通用的图形表示法&#xff0c;用以展示步骤、决策和循环等流程控制结构。它通常用于描述算法、程序执行流程或业务过程&#xff0c;关注于任务的顺序执行。流程图强调顺序、分支和循环&#xff0c;适用于详细说明具体的处理步骤&#xff0c;图形符号相对基础和通用…...

Easy TCP Analysis提供了四大特性,兼顾了TCP数据包分析入门学习到实战问题排查不同阶段用户对工具的需求

一款兼顾TCP数据包分析入门学习和实战不同阶段用户需求的工具 Easy TCP Analysis是一款在线TCP数据包分析工具&#xff0c;致力于让TCP数据包分析变得跟看聊天记录一样简单&#xff01; Easy TCP Analysis提供了四大特性&#xff0c;兼顾了从入门学习到实战分析不同阶段用户对…...

【2】STM32·FreeRTOS·任务创建和删除

目录 一、任务创建和删除的API函数 1.1、动态创建任务函数 1.2、静态创建任务函数 1.3、任务删除函数 二、任务创建和删除&#xff08;动态方法&#xff09; 三、任务创建和删除&#xff08;静态方法&#xff09; 一、任务创建和删除的API函数 任务的创建和删除本质就是…...

日志审计系统在提高网络安全方面具有哪些重要的作用

随着信息技术的飞速发展&#xff0c;我们正处于一个高度互联、数据驱动的网络时代。在这个时代&#xff0c;日志审计系统作为网络安全和信息管理的重要工具&#xff0c;发挥着至关重要的作用。下面德迅云安全就详细介绍下关于日志审计系统在当今网络时代的重要性。 一、什么是日…...

二维泊松方程(Neumann+Direchliet边界条件)有限元Matlab编程求解|程序源码+说明文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…...

13_Scala面向对象编程_伴生对象

文章目录 1.伴生对象1.1 scala的一个性质&#xff0c;scala文件中的类都是公共的&#xff1b;1.2 scala使用object关键字也可以声明对象&#xff1b; 3.关于伴生对象和类4.权限修饰符&#xff0c;scala仅有private;5.伴生对象可以访问伴生类中的私有属性&#xff1b;6.案例7.伴…...

RS485空调系统到BACnet江森楼宇系统的高效整合攻略

智慧城市的每一栋建筑都在追求更高的能效与更佳的居住体验&#xff0c;而这一切的实现离不开强大且灵活的楼宇自动化系统。其中&#xff0c;协议转换网关作为连接不同设备的纽带&#xff0c;扮演着至关重要的角色。本文将以一个典型的商业综合体为例&#xff0c;揭秘BACnet协议…...

把笔记变成可生长的知识系统:Obsidian 技术介绍

Obsidian 不只是 Markdown 编辑器。它更像运行在本地文件之上的知识操作系统&#xff1a;用纯文本保存内容&#xff0c;用链接组织关系&#xff0c;用插件扩展能力&#xff0c;把经验沉淀为可检索、可复用、可迁移的长期资产。1. Obsidian 是什么 Obsidian 是一款以 Markdown 文…...

Asp.net Mvc教学: LINQ相关的几大分类的使用率-由Deepseek产生

基于当前&#xff08;2026年&#xff09;.NET开发生态的实际情况&#xff0c;这五大方法的使用率呈现出非常明显的两极分化趋势。 简单直接地回答&#xff1a;使用率高的只有两个&#xff0c;其他三个使用率极低&#xff0c;属于特定场景工具。 以下是具体的排名与解析&#xf…...

暗黑破坏神2存档编辑器终极指南:免费在线工具轻松定制你的游戏角色

暗黑破坏神2存档编辑器终极指南&#xff1a;免费在线工具轻松定制你的游戏角色 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否厌倦了在暗黑破坏神2中反复刷装备却总是得不到心仪的物品&#xff1f;想要体验不同职业的强力…...

Genesys Cloud技能库:模块化对话机器人开发实战指南

1. 项目概述&#xff1a;一个为Genesys Cloud平台量身定制的技能库如果你正在或计划使用Genesys Cloud来构建你的客户服务体验&#xff0c;并且厌倦了从零开始编写每一个对话流程&#xff0c;那么这个名为“genesys-cloud-skills”的开源项目&#xff0c;绝对值得你花时间深入了…...

jquery-confirm在真实项目中的应用:电商、后台管理、表单验证等场景实战

jquery-confirm在真实项目中的应用&#xff1a;电商、后台管理、表单验证等场景实战 【免费下载链接】jquery-confirm A multipurpose plugin for alert, confirm & dialog, with extended features. 项目地址: https://gitcode.com/gh_mirrors/jq/jquery-confirm j…...

边缘计算能效革命:从架构革新到产业落地的破局之路

1. 边缘计算的核心矛盾&#xff1a;智能需求与能源瓶颈的碰撞在过去的几年里&#xff0c;我亲眼见证了计算范式的一次深刻迁徙&#xff1a;从集中式的云端&#xff0c;正不可逆转地向着物理世界的每一个角落——也就是我们常说的“边缘”——扩散。驱动这股浪潮的&#xff0c;是…...

基于C语言实现(控制台)小型文件系统

♻️ 资源 大小&#xff1a; 3.40MB ➡️ 资源下载&#xff1a;https://download.csdn.net/download/s1t16/87430288 小型文件系统 一、需求分析 1.1 小型文件系统介绍 科技的进步已将人类带入了信息大爆炸的时代&#xff0c;随着计算机科学技术的不断发展&#xff0c;计算…...

浏览器光标锁定技术:Pointer Lock API与全屏API实战指南

1. 项目概述&#xff1a;一个解决浏览器光标“越狱”问题的实用工具如果你是一名前端开发者&#xff0c;或者经常需要制作在线演示、录屏教程&#xff0c;甚至是在开发一个网页端的游戏&#xff0c;那你一定遇到过这个让人头疼的问题&#xff1a;鼠标光标在网页里“不老实”。当…...

企业级AutoCAD自动化引擎:Python驱动CAD工作流性能提升300%架构解析

企业级AutoCAD自动化引擎&#xff1a;Python驱动CAD工作流性能提升300%架构解析 【免费下载链接】pyautocad AutoCAD Automation for Python ⛺ 项目地址: https://gitcode.com/gh_mirrors/py/pyautocad 技术价值定位 pyautocad作为Python生态中的企业级AutoCAD自动化解…...

别再乱用工作队列了!深入Linux内核workqueue的5个特性与3个常见使用误区

深入Linux内核workqueue&#xff1a;5个核心特性与3个高频避坑指南 在Linux内核开发中&#xff0c;工作队列&#xff08;workqueue&#xff09;作为异步任务处理的核心机制&#xff0c;其设计哲学远比表面看到的API调用复杂得多。许多开发者虽然能够熟练使用schedule_work()等基…...