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

Unity将摄像机视角保存成Json文件方便读取使用

系列文章目录

unity工具


文章目录

  • 系列文章目录
  • 👉前言
  • 👉一、设置环境
  • 👉二、代码如下
    • 👉三、使用方法
  • 👉四、下次外部调用json里面的摄像机位置的时候如下代码方法
  • 👉壁纸分享
  • 👉总结


👉前言

有时候会用到给模型定位视角的(写死的那种,因为有时候人家就要那个视角,没有办法只能整个小工具来方便一下自己),所以写了一个动态保存视角的功能,方便使用,简单记录一下,不喜勿喷哦,
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
有问题 欢迎点赞评论哦.
下面就让我们进入正文吧 !


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、设置环境

1.创建Plugins文件夹
2.把LitJson.dll文件放到Plugins文件夹里
3.创建UI 一个InputField 输入框 一个按钮Button

4.代码的界面设置如下(下面也有介绍)
在这里插入图片描述

👉二、代码如下

1.生成的json文件在特殊文件StreamingAssets里面,具体设置到那个文件夹里面可以自己设置,看你自己心情哦,自己满意就行了哦.
2.代码也不复杂,一个读取json数据到字典的方法,一个保存json格式数据的,具体往下看代码吧
3.代码如下:

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>();/// <summary>/// 1F相机位置/// </summary>private void Awake(){StartCoroutine(LoadDeviceDic());}// Start is called before the first frame updatevoid Start(){            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]));}/// <summary>/// 将输入的视角名称和当前摄像机的视角保存到json里面/// </summary>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, ss);Debug.Log("Dictionary data saved to: " + filePath);}/// <summary>/// 加载保存的相机视角数据到字典/// </summary>/// <returns></returns>public  IEnumerator 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);}     }}

👉三、使用方法

1.具体使用,可以运行的时候输入,点击保存,
2.也可以在编辑器里设置摄像机位置,手动输入到json里面,都可以,
3.下次调用的时候直接传你设置的摄像机位置名称即可
第四种
在脚本里加上一个输入框组件(InputField)一个按钮组件(Button)
在这里插入图片描述

在这里插入图片描述
脚本设置如下图
在这里插入图片描述
设置完成就可以运行场景,摄像机移动到合适的位置,起个名字输入到输入框里,点击按钮保存即可

👉四、下次外部调用json里面的摄像机位置的时候如下代码方法

 /// <summary>/// 获取存在字典里面的摄像机位置/// </summary>/// <param name="name">存的位置名称</param>public void SeetCamerView(string name){if (CameraSaveLoad.Instance.CamerViewDic.TryGetValue(name, out CameraSaveLoad.CameraView cameraViewdate)){if (cameraViewdate != null){currentCamerTr = name;Vector3 po = CameraSaveLoad.Instance.StringToVector3(cameraViewdate.position);Vector3 ro = CameraSaveLoad.Instance.StringToVector3(cameraViewdate.rotation);//设置摄像机的位置和旋转GameManager.Instance.SettingCamera(po, ro);}}}

具体调用方法可以自己实现哦
欢迎点赞评论哦,感谢,私聊也是可以的

👉壁纸分享

请添加图片描述
请添加图片描述

👉总结

本次总结的就是保存摄像机位置方便使用的实现,有需要会继续添加新的
如能帮助到你,就帮忙点个关注吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒

相关文章:

Unity将摄像机视角保存成Json文件方便读取使用

系列文章目录 unity工具 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、设置环境&#x1f449;二、代码如下&#x1f449;三、使用方法 &#x1f449;四、下次外部调用json里面的摄像机位置的时候如下代码方法&#x1f449;壁纸分享&#x1f449;总结 &#x1f449…...

git是什么/基本指令

git作用 去中心化&#xff0c; 分布式版本控制器 新增术语&#xff1a;仓库区&#xff0c; 工作区&#xff0c; 暂存区 具体见下板书 常用git命令 git clone 仓库网址 git status 查看仓库状态 git add newfile 临时添加到git仓库 git commit -m 正式添加git仓库 g…...

Linux 中的同步机制

代码基于&#xff1a;Kernel 6.6 临界资源&#xff1a;指哪些在同一时刻只允许被一个线程访问的软件或硬件资源。这种资源的特点是&#xff0c;如果有线程正在使用&#xff0c;其他进程必须等待直到该线程释放资源。 临界区&#xff1a;指在每个线程中访问临界资源的那段代码。…...

Day17 枚举、typedef、位运算、堆空间的学习

目录 枚举 typedef 位运算 堆上的空间 枚举 一个一个列举出来&#xff0c;是指将变量的值一一列举出来&#xff0c;变量的值只限于列举出来的值的范围内。 作用&#xff1a; 1、为了提高代码的可读性 2、提高代码的安全性 枚举类型 基本语法&#xff1a; enum 枚举名 { …...

Python爬虫与数据分析:中国大学排名的深度挖掘

前言 &#x1f449; 小编已经为大家准备好了完整的代码和完整的Python学习资料&#xff0c;朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】 一、选题背景 高考作为中国学生生涯中最为重要的事&#xff0c;在高考之后&#xff0c;选择一所…...

微软开源库 Detours 详细介绍与使用实例分享

目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口&#xff0c;实现对程序异常的拦截 C软件异常排查从入门到精通…...

js中的getElementById的使用方法

在JavaScript中&#xff0c;document.getElementById()是一种用于通过元素的id属性获取DOM元素的方法。它的作用是返回与指定id匹配的HTML元素。 使用document.getElementById()可以通过元素的id属性直接获取该元素的引用&#xff0c;然后可以使用该引用对元素进行各种操作。例…...

设计模式 - 桥接模式

💝💝💝首先,欢迎各位来到我的博客!本文深入理解设计模式原理、应用技巧、强调实战操作,提供代码示例和解决方案,适合有一定编程基础并希望提升设计能力的开发者,帮助读者快速掌握并灵活运用设计模式。 💝💝💝如有需要请大家订阅我的专栏【设计模式】哟!我会定…...

LeetCode530 二叉搜索树的最小绝对差

前言 题目&#xff1a; 530. 二叉搜索树的最小绝对差 文档&#xff1a; 代码随想录——二叉搜索树的最小绝对差 编程语言&#xff1a; C 解题状态&#xff1a; 成功解决&#xff01; 思路 注意题目中的二叉搜索树&#xff0c;这个条件暗示每个节点的左子节点肯定小于该节点&am…...

【STM32 FreeRTOS】信号量与互斥锁

二值信号量 二值信号量的本质是一个队列长度为1的队列&#xff0c;该队列就只有空和满两种情况&#xff0c;这就是二值。 二值信号量通常用于互斥访问或任务同步&#xff0c;与互斥信号量比较类似&#xff0c;但是二值信号量有可能会导致优先级翻转的问题&#xff0c;所以二值…...

SP:eric 靶场复现【附代码】(权限提升)

靶机下载地址&#xff1a; https://www.vulnhub.com/entry/sp-eric,274/https://www.vulnhub.com/entry/sp-eric,274/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.7.0/24|grep -B 2 08:00:27:75:19:80 1.2. 端口扫描 nmap 192.168.7.104 -p…...

SpringBoot项目启动直接结束--已解决

点击启动类&#xff0c;项目启动了&#xff0c;但是却直接停止了。遇到这个问题如何解决呢&#xff1f; 想要项目一直启动是要部署在tomcat服务器上面了&#xff0c;说明现在项目没有运行在tomcat服务器上面。 解决方案: 添加springweb的starter依赖。 <dependency><…...

【笔记】从零开始做一个精灵龙女-画贴图阶段(下)

补充四点&#xff0c;第一&#xff0c;前期画体积用一号或十三号笔刷&#xff0c;压力60&#xff0c;硬度80&#xff0c;体积大一点 2号笔刷比较适合画过渡和软一点的东东 第二&#xff0c; 游戏里面角色原画海报都是发光很亮很透。但是在bp不能画那么亮&#xff0c;因为你进…...

React 学习——react项目中加入echarts图

实现的代码如下&#xff1a; import * as echarts from echarts import { useEffect, useRef } from react; const Home ()>{const chartRef useRef(null);useEffect(()>{// const chartDom document.getElementById(main);//使用id获取节点const chartDom chartRef…...

链表算法题一

​ 旋转链表 旋转链表 首先考虑特殊情况 若给定链表为空表或者单个节点,则直接返回head,不需要旋转操作.题目给定条件范围: 0 < k < 2 ∗ 1 0 9 0 < k < 2 * 10^9 0<k<2∗109,但是受给定链表长度的限制,比如示例2中,k4与k1的效果等价. 那么可以得出kk%l…...

Unity(2022.3.38LTS) - 基础概念

目录 一. 场景 二. 游戏对象 三. 组件 四. 标签 五. 静态游戏对象 六. 保存 一. 场景 Unity 场景是游戏或应用开发中的一个重要概念。 Unity 场景的组成元素&#xff1a; 它通常包含了各种游戏对象&#xff0c;比如 3D 模型、灯光、摄像机、脚本组件、音频源等等。 作用…...

无人机之飞手必看篇

一、熟悉无人机设备 了解你的无人机&#xff1a;熟悉无人机的各个部分&#xff0c;包括遥控器、电池、螺旋桨和摄像头等。 预飞行检查&#xff1a;在每次飞行前进行预检查&#xff0c;确保所有部件正常工作&#xff0c;螺旋桨牢固&#xff0c;电池充满电。 二、选择适当的飞…...

数据结构(11)——二叉搜索树

欢迎来到博主的专栏&#xff1a;数据结构 博主ID:代码小豪 文章目录 二叉搜索树二叉搜索树的声明与定义二叉搜索树的查找二叉搜索树的插入二叉搜索树的中序遍历二叉搜索树的删除 二叉搜索树 二叉搜索树也称二叉排序树&#xff0c;是具备以下特征的二叉树 &#xff08;1&#x…...

如何使用和配置 AWS CLI 环境变量?

欢迎来到雲闪世界。环境变量在配置和保护应用程序方面起着至关重要的作用&#xff0c;在使用 AWS CLI&#xff08;命令行界面&#xff09;时&#xff0c;它们的使用尤其重要。在这篇博客文章中&#xff0c;我们将深入探讨环境变量的世界&#xff0c;探索它们的用途、它们在 AWS…...

七、流程控制

if语句 在go语言中if语句的写法是比较简单的&#xff0c;也是很常见的 func main() {a : trueif a {fmt.Println("a is true")} }if else 语句 func main() {a : trueif !a {fmt.Println("a is true")} else {fmt.Println("a is false")} }el…...

【通过python启动指定的文件】

通过python启动指定的文件 在 Python 中&#xff0c;可以使用os模块的startfile函数&#xff08;在 Windows 系统中&#xff09;或者subprocess模块来启动指定的文件。 以下是使用os模块在 Windows 系统中的示例&#xff1a; import osfile_path "C:\\path\\to\\your\…...

区块链开源的项目有哪些?

区块链领域有许多开源项目&#xff0c;它们覆盖了从基础设施到应用层的不同方面。以下是一些著名的区块链开源项目&#xff1a; 1. Bitcoin (比特币)&#xff1a;第一个去中心化的加密货币&#xff0c;源代码在 GitHub 上开源。它实现了区块链技术的基本概念。 2. Ethereum (…...

3152. 特殊数组 II(24.8.14)

题目 如果数组的每一对相邻元素都是两个奇偶性不同的数字&#xff0c;则该数组被认为是一个 特殊数组 。 你有一个整数数组 nums 和一个二维整数矩阵 queries&#xff0c;对于 queries[i] [fromi, toi]&#xff0c;请你帮助你检查 子数组 nums[fromi…toi] 是不是一个 特殊数组…...

Android 全系统版本文件读写最佳适配,CV 即用(适配到 Android 14)

结合着Android的历史问题&#xff0c;我们需要这样写才行&#xff1a; 首先 manifest 部分 <manifest><!-- Devices running Android 12L (API level 32) or lower --><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" a…...

【日记】朋友和他女朋友领证了(368 字)

正文 一定程度上感受到了驻场运维的水深火热&#xff0c;感觉成天到晚都在救火。今天下午就给人修了四五台机器…… 回想了一下&#xff0c;今天貌似还真没干什么。毕竟早上睁眼就是 8:35 了&#xff0c;给人吓得半死。 &#xff08;感觉 AI 也很智障&#xff0c;当初就是发现音…...

行业大模型:信用评分大模型、生产优化大模型、库存管理大模型、物流行业大模型、零售行业大模型

金融行业大模型&#xff1a;信用评分大模型 信用评分模型在金融行业中扮演着至关重要的角色&#xff0c;它通过对个人或企业的信用状况进行评估&#xff0c;帮助金融机构有效控制风险&#xff0c;提高业务效率。以下是信用评分模型的特点及案例介绍&#xff1a; 信用评分模型…...

VSCode 搭配 Windows 下各种 C/C++ 编译器使用

Visual Studio Code(简称 VSCode)是一款由微软开发的免费、开源的代码编辑器,它支持多种编程语言,包括 C 和 C++。VSCode 提供了丰富的扩展和定制功能,使得开发者能够根据自己的需求进行个性化设置。在 Windows 环境下,搭配合适的 C/C++ 编译器,VSCode 能够成为一个强大…...

【JavaEE】线程池和定时器

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 ✏️一.线程池 在Java中&#xff0c;线程池&#xff08;Thread Pool&#xff09;是一种用于管理并发线程的机制&#xff0c;它提供了一种创建、复用和管理一组…...

《Unity3D网络游戏实战》通用服务器框架

服务端程序的两大核心是处理客户端的消息和存储玩家数据 模块划分 游戏流程 连接阶段&#xff1a;客户端调用Connect连接服务端即为连接阶段。连接后双端即可通信&#xff0c;但服务端还不知道玩家控制的是哪个角色。于是客户端需要发送一条登录协议&#xff0c;协议中包含用户…...

LeetCode404 左叶子之和

前言 题目&#xff1a; 404. 左叶子之和 文档&#xff1a; 代码随想录——左叶子之和 编程语言&#xff1a; C 解题状态&#xff1a; 成功解答&#xff01; 思路 注意左叶子节点的定义&#xff1a;节点A的左孩子不为空&#xff0c;且左孩子的左右孩子都为空&#xff08;说明是…...

手机有软件做ppt下载网站有哪些内容吗/百度网站下载安装

...

定制网站开发报价/app推广赚钱平台

Java Q&A: 使用Factory Method模式 (转)[more]Java Q&A: 使用Factory Method模式Q: 阅读 "Polymorphism in its purest form" 一文时&#xff0c;我看到了一个不熟悉的术语 "Factory method"。你能解释一下什么是Factory method并说明如何使用它吗…...

wordpress 访问统计/排名优化网站seo排名

浮点型在内存中的存储分布方式因机器平台而异&#xff0c;完全理解所有机器平台中的浮点型存储无疑是一件相当麻烦的事。幸运的是&#xff0c;大多机器平台都遵守 IEEE-754 标准&#xff0c;很可能读者和我使用的平台正是使用的 IEEE-754 标准。计算机是如何存储浮点数的呢&…...

个人网页设计师/长沙百度快速优化排名

Ⅰ、概述 打开上一篇文章新建的工程&#xff0c;是提取的ST标准库里面源代码文件和UCOS工程包源代码文件。下载过的朋友可能会知道&#xff0c;直接编译那个工程会有大片的错误和警告&#xff0c;原因在于那个工程是没有经过修改源代码的工程&#xff0c;接下来就是讲述一步一步…...

廊坊建站模板系统/品牌推广运营策划方案

cmd下tracter //路由追踪//服务开关net start PPTVServicenet stop Spooler输入“ipconfig /release”&#xff0c;按“Enter”键&#xff0c;将释放IP地址。输入“ipconfig /renew” &#xff0c;按“Enter”键&#xff0c;将重新获取IP地址。在所在的网络中使用net view命令…...

web旅游网站开发/网络策划是做什么的

【芝麻代理】请添加链接描述做新媒体运营经常遇到的问题是&#xff0c;我的网站每天都发布新文章&#xff0c;被百度收录的文章却很少&#xff0c;不知道是什么原因&#xff0c;如何让我发布的文章被百度收录&#xff1f;就此问题&#xff0c;个人总结了如下十一条经验&#xf…...