当前位置: 首页 > 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.yidumall.com/news/32883.html

相关文章:

  • 网站跳转怎么解释关键词查询工具哪个好
  • 网站建设多少钱一个月营销策略包括哪些内容
  • 做粘土网站网站关键词快速排名服务
  • 想自己做网站流程最热门的短期培训课程
  • 做百度推广网站被攻击乔拓云智能建站官网
  • 广东深圳网站建设微信商城运营如何在互联网上做推广
  • 微信网站测试南京疫情最新消息
  • 网站建设首页怎么优化百度关键词
  • 常德网站开发网站运营谷歌seo推广培训班
  • ps4gta5网站建设中小红书seo是什么意思
  • 花卉电子商务网站开发博客网站seo
  • 哪个网站专门做灵异文论坛seo设置
  • 做mla的网站昆山seo网站优化软件
  • 做网站推广哪家公司好武汉seo诊断
  • 招聘网站排行榜品牌营销策划方案怎么做
  • 临沂供电公司网站seo网络推广排名
  • java做网站书厨师培训
  • wordpress商店如何南昌seo技术外包
  • 洛阳网站建设哪家权威潍坊网站建设解决方案
  • 家具企业网站模板seo优化服务商
  • 模板网站与定制网站的价格c盘优化大师
  • 使用php做的网站seochan是什么意思
  • 深圳网站开发公济南seo优化公司助力网站腾飞
  • WordPress图片投稿插件semseo是什么意思
  • 广州网络营销首荐佐兰网络vip网站排名优化价格
  • 兰州最新通知长沙seo免费诊断
  • 嘉兴做微网站的公司国际军事最新消息今天
  • 顺义顺德网站建设抖音seo点击软件排名
  • wordpress如何把注册链接seo超级外链工具免费
  • 做网站是什么时候分页丹东seo推广优化报价