个人成立公司怎么做企业网站,专业新站整站快速排名公司,铁路工程造价信息网,农产品信息网站的建设系列文章目录
unity工具 文章目录 系列文章目录#x1f449;前言#x1f449;一、设置环境#x1f449;二、代码如下#x1f449;三、使用方法 #x1f449;四、下次外部调用json里面的摄像机位置的时候如下代码方法#x1f449;壁纸分享#x1f449;总结 #x1f449…系列文章目录
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 : MonoSingletonCameraSaveLoad
{public Transform cameraTransform; // 相机的Transform组件public string saveFileName camera_view.json; // 保存文件的名称public InputField viewNameInput; // 用于输入视角名称的UI InputFieldpublic Button surebtn; //保存视角的按钮public Dictionarystring, CameraView CamerViewDic new Dictionarystring, CameraView();/// summary/// 1F相机位置/// /summaryprivate 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 namesVector/param/// returns/returnspublic 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里面/// /summarypublic 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(Dictionarystring, 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/returnspublic 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.ToObjectDictionarystring, CameraView(jsonStr);} }}
三、使用方法
1.具体使用,可以运行的时候输入,点击保存, 2.也可以在编辑器里设置摄像机位置,手动输入到json里面,都可以, 3.下次调用的时候直接传你设置的摄像机位置名称即可 第四种 在脚本里加上一个输入框组件(InputField)一个按钮组件(Button) 脚本设置如下图 设置完成就可以运行场景,摄像机移动到合适的位置,起个名字输入到输入框里,点击按钮保存即可
四、下次外部调用json里面的摄像机位置的时候如下代码方法 /// summary/// 获取存在字典里面的摄像机位置/// /summary/// param namename存的位置名称/parampublic 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开发技巧觉得有用记得一键三连哦。么么哒