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

品牌的佛山网站建设杭州网站商场开发

品牌的佛山网站建设,杭州网站商场开发,做动画视频的网站,店铺装修设计网目录 基本流程 1.代码思路 2.代码实现 最终效果 补充知识点 1.序列化 2.委托 基本流程 现在在切换场景后,场景中的物品即使被拾取了,也还是会被重新加载出来,所以本篇文章的任务是在切换场景前后能保留当前场景的数据 1.代码思路 (1)为了保留处在地上的物品数据,就需要…

目录

基本流程

1.代码思路

2.代码实现

最终效果

补充知识点

1.序列化

2.委托


基本流程

        现在在切换场景后,场景中的物品即使被拾取了,也还是会被重新加载出来,所以本篇文章的任务是在切换场景前后能保留当前场景的数据

1.代码思路

        (1)为了保留处在地上的物品数据,就需要保存物品的坐标,以及这个物品是什么,所以在卸载场景之前读取要卸载的场景中的物品都有什么,重新加载场景的时候,按照之前的进度把物品再生成出来

        (2)创建一个存储数据的字典,这个字典需要把场景的名字和物品的信息存储在一起,由于一个场景里有多个物品,那么就需要一个列表来保存

2.代码实现

新增和修改ItemManager.cs的代码

private Dictionary<string, List<SceneItem>> sceneItemDict = new Dictionary<string, List<SceneItem>>();private void OnEnable()
{EventHandler.InstantiateItemInScene += OnInstantiateItemInScene;EventHandler.BeforeSceneUnloadEvent += OnBeforeSceneUnloadEvent;EventHandler.AfterSceneLoadedEvent += OnAfterSceneLoadedEvent;
}private void OnDisable()
{EventHandler.InstantiateItemInScene -= OnInstantiateItemInScene;EventHandler.BeforeSceneUnloadEvent -= OnBeforeSceneUnloadEvent;EventHandler.AfterSceneLoadedEvent -= OnAfterSceneLoadedEvent;
}private void OnBeforeSceneUnloadEvent()
{GetAllSceneItems();
}private void OnAfterSceneLoadedEvent()
{itemParent = GameObject.FindWithTag("ItemParent").transform;RecreateAllItems();
}/// <summary>
/// 获得当前场景所有Item
/// </summary>
private void GetAllSceneItems()
{ List<SceneItem> currentSceneItems = new List<SceneItem>();foreach (var item in FindObjectsOfType<Item>()){SceneItem sceneItem = new SceneItem{ itemID = item.itemID,position = new SerializableVector3(item.transform.position)};currentSceneItems.Add(sceneItem);}if (sceneItemDict.ContainsKey(SceneManager.GetActiveScene().name)){//找到数据就更新Item数据列表sceneItemDict[SceneManager.GetActiveScene().name] = currentSceneItems;}else //如果是新场景{sceneItemDict.Add(SceneManager.GetActiveScene().name, currentSceneItems);}
}/// <summary>
/// 刷新重建当前场景的物品
/// </summary>
private void RecreateAllItems()
{List<SceneItem> currentSceneItems = new List<SceneItem>();if (sceneItemDict.TryGetValue(SceneManager.GetActiveScene().name, out currentSceneItems)){if (currentSceneItems != null){//清场foreach (var item in FindObjectsOfType<Item>()){Destroy(item.gameObject);}foreach (var item in currentSceneItems){Item newItem = Instantiate(itemPrefab, item.position.ToVector3(), Quaternion.identity, itemParent);newItem.Init(item.itemID);}}}
}

DataCollection新增可序列化坐标和场景中的物品

[System.Serializable]
//可序列化的坐标
public class SerializableVector3
{//坐标 public float x, y, z;public SerializableVector3(Vector3 pos){this.x = pos.x;this.y = pos.y;this.z = pos.z;}public Vector3 ToVector3(){ return new Vector3(x,y,z);}public Vector2Int ToVector2Int(){return new Vector2Int((int)x, (int)y);}
}[System.Serializable]
public class SceneItem
{public int itemID;public SerializableVector3 position;
}

 对调TransitionManager中呼叫加载场景之后的事件以及场景淡出效果的顺序

private IEnumerator Transition(string sceneName, Vector3 targetPosition)
{//呼叫卸载场景之前要做的事EventHandler.CallBeforeSceneUnloadEvent();yield return Fade(1);yield return SceneManager.UnloadSceneAsync(SceneManager.GetActiveScene());yield return LoadSceneSetActive(sceneName);//移动人物坐标EventHandler.CallMoveToPosition(targetPosition);//呼叫加载场景之后的事件EventHandler.CallAfterSceneLoadedEvent();yield return Fade(0);
}

最终效果

拾取物品切换场景后,场景中的物品并不存在

 

补充知识点

1.序列化

        序列化,简单来说就是将对象转化为可传输的字节序列的过程叫做序列化,

        这里的对象指的任意脚本Unity文件,

        可以将对象转换为字节序列后,存储在数据库,内存或者文件
        

        我通过这个视频了解的

2.委托

        虽然在该专栏里的其他文章中补充过该知识,但是该视频是我遇到过的把委托讲的最通透的

因此再次提出并记录在这个文章中

        视频在这 

        up主的其他视频也非常高质量,推荐观看  

http://www.yayakq.cn/news/989033/

相关文章:

  • 有没有专门做设计的网站宁波seo外包服务平台
  • 网站开发项目流程建筑工人招聘网站怎么做
  • 乌云网是个什么网站一个外国人建设的中国文字网站
  • 网站官网建设注意阿里云做网站需要些什么
  • 旅游网站网页设计图片某某公司电子商务网站建设与维护
  • 做网站租服务器一年多少钱淘特app官方网站下载
  • 昆山建设信息网站沧州市建设局网站
  • 如何访问自己建的网站潍坊专业技术人员服务平台
  • 粉红色网站asp网站备案图标代码
  • 百度做网站优化多少钱一年滑动网站
  • dedecms建手机网站网站建设和维护价格
  • editplus怎么创网站中小学校园网站建设
  • 医院网站建设公司价格低wordpress签到插件
  • 网站怎么后台登陆辽宁省建造师执业信息网
  • 建设 银行网网站wordpress 插件 游戏
  • seo网站优化是什么北京网站建设V芯ee8888e
  • 甘肃精神文明建设网站佛山网站建设工作室
  • 做英语手抄报 什么网站怎么做html网页
  • 推荐企业门户网站建设网站设计的国际专业流程是什么
  • 网站搭建后台免费地方门户网站系统
  • 青岛网站seo分析湖北网站建设电话
  • 有了空间怎么做网站清除网站黑链
  • 制作网页框架某个网站seo分析实例
  • 海口网站制作案例美食网站开发的目的
  • 网站要怎么上传效果好的网站制作公司
  • 建设网站300多块钱apm安装wordpress网页无法访问
  • 网站做视频好不好好看logo图片
  • 个人网站空间购买吉安网站制作公司
  • python做网站验证码广告设计培训专业
  • 网站页面报价hao123从上网官网