游戏的存档和读档和一些注意点

2024-02-18 00:40
文章标签 游戏 注意 存档 读档

本文主要是介绍游戏的存档和读档和一些注意点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.通过协程 使怪物生成,通过 协程里面包含方法(有协程启动)来实现多个协程的效果

IEnumerator TimeBulid(){yield return new WaitForSeconds(Random.Range(1,5));RangeBulid();}private void MosterDead(){if(moster != null){moster.GetComponent<BoxCollider>().enabled=false;moster.SetActive(false);moster=null;}StartCoroutine("TimeBulid");}

2.控制对象随鼠标旋转

transform.eulerAngles是Unity中的一个属性,用于获取或设置物体的欧拉角(Euler Angles)。欧拉角是一种表示物体旋转的方式,通过三个角度(分别对应x、y、z轴)来描述物体的旋转状态。

在使用transform.eulerAngles时,有一些注意事项:

  1. 不要直接对eulerAngles的某个轴进行赋值,例如eulerAngles.x = 10。这样做会导致旋转的不稳定和意外的旋转效果。
  2. 如果需要设置新的欧拉角值,应该同时设置所有的轴,例如transform.eulerAngles = new Vector3(x, y, z)。
  3. Unity会将欧拉角转换为存储在Transform.rotation中的旋转值,并在需要时将其转换回欧拉角。

Mathf.Clamp方法的语法如下:

public static float Clamp(float value, float min, float max);
其中,value表示要限制的值,min表示限制范围的最小值,max表示限制范围的最大值。如果value小于min,则返回min;如果value大于max,则返回max;否则返回value本身。

//分别求出鼠标在x和y上位置占屏幕大小的比例float xPosPrecent=Input.mousePosition.x/Screen.width;float yPosPrecent = Input.mousePosition.y /Screen.height;//设定对象的x和y的角度 float xAngle=-Mathf.Clamp(yPosPrecent*maxXrotation,minXrotation,maxXrotation)+15;float yAngle = Mathf.Clamp(xPosPrecent * maxYrotation, minYrotation, maxYrotation)-60;transform.eulerAngles=new Vector3(xAngle,yAngle,0); 

3.Collison和它的碰撞对象 ColliderOnTriggerEnterOnCollisionEnter的区别和用法

Collider是Collison这个类里面的一个变量(碰撞对象)

OnTriggerEnterOnCollisionEnter的区别和用法

OnCollisionEnter方法要求碰撞的发起方必须拥有刚体,而被碰撞方有没有刚体并不重要。OnTriggerEnter方法则对此没有要求,只需要碰撞双方有一个具有刚体即可触发。即刚体是一个判断是否实现碰撞的是与否的标志。
刚体对于系统的开销是很大的,所以在使用刚体时,根据可能发生的碰撞触发事件,适当的减少刚体,是一个减少资源消耗的好办法。 比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。           
原文链接:https://blog.csdn.net/tianyao9hen/article/details/53141141

4.Animation的Clip(默认动画

5.https://blog.csdn.net/pixel_nplance/article/details/80759122

6.PlayerPrefs数据存储

PlayerPrefs使用的是类似字典的存储方式。

玩家进行数据存储时,需要输入一个Key参数以及一个Value参数,也就是键和值。每个键对应一个将要存储到硬盘中的值。

   public void MusicSwitch(){if(musicToggle.isOn == false){musicAudio.enabled = false;PlayerPrefs.SetInt("MusicOn", 0);}else{musicAudio.enabled = true;PlayerPrefs.SetInt("MusicOn", 1);}PlayerPrefs.Save();}

很适合用来存储那些即使丢失了也无所谓的数据。

  • 首先当然是玩家的偏好设置,比如音乐音量 是否全屏等设置选项。

  • 第二 则是一些简单的数据。比如玩家的得分列表。

  • 第三 是在制作游戏原型时暂时的数据存储。

注意完事之后要保存 

7.二级制存档和读档

大致思路

首先按创建一个类 加上可序列化代码 不需要继承自 MonoBehaviour  用这个类创建对象,再用二进制格式化程序的方法来序列化对象     读档则相反

一些概念:

1.在Unity中,  Application.dataPath  是一个用于访问项目中"Assets"文件夹的字符串变量。它表示了项目在文件系统中的路径,  我们可以通过它来读取或写入项目中的资源和文件。

2.文件和流 从零开始的Unity学习_15. 文件和流(上) - 技术专栏 - Unity官方开发者社区icon-default.png?t=N7T8https://developer.unity.cn/projects/63bcce43edbc2a3ec331cc75

存档流程和代码:

    private void SavebyBin(){SaveDate saveDate=savedata();//创建一个二进制格式化程序BinaryFormatter bf=new BinaryFormatter();//创建一个文件流FileStream fileStream = File.Create(Application.dataPath + "/StreamingFile" + "/dataByBin.txt");//二进制格式化程序的方法来序列化对象 参数:创建的文件流 需要序列化的对象bf.Serialize(fileStream, saveDate);//关闭流fileStream.Close();}

读档流程和代码

   private void LoadByBin(){if(File.Exists(Application.dataPath + "/StreamingFile" + "/dataByBin.txt")){//加载游戏//反序列化 打开一个文件流BinaryFormatter bf = new BinaryFormatter();FileStream fileStream = File.Open(Application.dataPath + "/StreamingFile" + "/dataByBin.txt", FileMode.Open);SaveDate saveDate = (SaveDate)bf.Deserialize(fileStream);fileStream.Close();SetGame(saveDate);}else{UIManager._instance.Showtext("存档文件不存在");}}

8.JSON存档和读档

和二进制差不多,用了插件省略了一些步骤

存档:

 private void SavebyJsion(){SaveDate Save=savedata();string filePath = Application.dataPath + "/StreamingFile" + "/dataByJson.json";//调用JsonMapper.ToJson()方法把对象转化为JSON字符串string saveJsonstr = JsonMapper.ToJson(Save);//StreamWriter  Write()把字符串写入文件中StreamWriter sw = new StreamWriter(filePath);sw.Write(saveJsonstr);sw.Close();UIManager._instance.Showtext("保存成功");}

读档:

    private void LoadByBin(){if(File.Exists(Application.dataPath + "/StreamingFile" + "/dataByBin.txt")){//加载游戏//反序列化 打开一个文件流BinaryFormatter bf = new BinaryFormatter();FileStream fileStream = File.Open(Application.dataPath + "/StreamingFile" + "/dataByBin.txt", FileMode.Open);SaveDate saveDate = (SaveDate)bf.Deserialize(fileStream);fileStream.Close();SetGame(saveDate);UIManager._instance.Showtext("");}else{UIManager._instance.Showtext("存档文件不存在");}}

9.Xml存档和读档

通过创建Xml文档,创建多个层级元素,将对象数据转化为字符串存入各个层级元素中,代码较前两种复杂

存档:

 private void SavebyXML(){SaveDate save=savedata();string filePath = Application.dataPath + "/StreamingFile" + "/dataByXml.txt";//创建XML文档XmlDocument xmlDoc = new XmlDocument();//创建根节点XmlElement root = xmlDoc.CreateElement("save");//设置根节点属性root.SetAttribute("name", "savefiale");XmlElement target;XmlElement targetPosition;XmlElement monsterType;//将数据转化为string写入到xml文档中的各个元素中for (int i=0;i<save.liveTargetPosion.Count;i++){target = xmlDoc.CreateElement("target");targetPosition= xmlDoc.CreateElement("position");targetPosition.InnerText = save.liveTargetPosion[i].ToString();monsterType=xmlDoc.CreateElement("type");monsterType.InnerText = save.MosterTypes[i].ToString();//设置层级关系target.AppendChild(monsterType);target.AppendChild(targetPosition);root.AppendChild(target);}XmlElement shootnum=xmlDoc.CreateElement("shootnum");shootnum.InnerText=save.shootnum.ToString();root.AppendChild(shootnum);XmlElement score = xmlDoc.CreateElement("score");score.InnerText=save.score.ToString();root.AppendChild(score);xmlDoc.AppendChild(root);xmlDoc.Save(filePath);if(File.Exists(filePath)){UIManager._instance.Showtext("保存成功");}}

读档:

private void LoadByXML(){SaveDate save=new SaveDate();string filePath = Application.dataPath + "/StreamingFile" + "/dataByXml.txt";XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(filePath); XmlNodeList targets=xmlDoc.GetElementsByTagName("target");if(File.Exists(filePath)){if (targets.Count != 0){foreach (XmlNode target in targets){XmlNode targetPosition = target.ChildNodes[0];int targetPositionIndex = int.Parse(target.InnerText);save.liveTargetPosion.Add(targetPositionIndex);XmlNode Moster = target.ChildNodes[1];int MosterTypeIndex = int.Parse(Moster.InnerText);save.MosterTypes.Add(MosterTypeIndex);}}XmlNodeList shootnum = xmlDoc.GetElementsByTagName("shootnum");int shouutnumCount = int.Parse(shootnum[0].InnerText);save.shootnum = shouutnumCount;XmlNodeList score = xmlDoc.GetElementsByTagName("score");int scoreCount = int.Parse(score[0].InnerText);save.score = scoreCount;SetGame(save);UIManager._instance.Showtext("");}else{UIManager._instance.Showtext("存档文件不存在");}}

这篇关于游戏的存档和读档和一些注意点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_66230764/article/details/135849532
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/719513

相关文章

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

SpringMVC入参绑定特别注意

1.直接在controller中定义一个变量,但是此种传输方式有一个限制就是参数名和请求中的参数名必须保持一致,否则失效。 @RequestMapping("test2")@ResponseBodypublic DBHackResponse<UserInfoVo> test2(String id , String name){UserInfoVo userInfoVo = new UserInf

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在

第四次北漂----挣个独立游戏的素材钱

第四次北漂,在智联招聘上,有个小公司主动和我联系。面试了下,决定入职了,osg/osgearth的。月薪两万一。 大跌眼镜的是,我入职后,第一天的工作内容就是接手他的工作,三天后他就离职了。 我之所以考虑入职,是因为 1,该公司有恒歌科技的freex平台源码,可以学学,对以前不懂的解解惑。 2,挣点素材钱,看看张亮002的视频,他用了6000多,在虚幻商城买的吸血鬼游戏相关的素材,可以玩两年。我

nyoj 1038 纸牌游戏

poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。 一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。 代码如下: #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{char c[5];int rk;char da[5];int nu

如果出一个名叫白神话悟空的游戏

最近黑神话由于与原著不符引起了原著派的争议。 所以我在摸鱼的时候想到如果游科或者某个别的公司“痛改前非”不夹带私货完全复刻吴承恩百回版剧情制作一个“重走西游路”的游戏,会有一个什么样的销量?(设定为原著派已经多方渠道认证,此游戏的确没有夹带私货,绝大部分复刻了原著剧情) 游戏玩法我想了几类 超长线性有岔路蜈蚣形状地图,蜈蚣的腿部是探索区域和支线,重走西游路线,开篇就是开始取经前唐玄宗御弟cg