当前位置:   article > 正文

B3:Unity制作Moba类游戏——加载地图系统_unity moba

unity moba

 小时候,快乐是一个小小的风筝,我在地上,风筝在天上。

 长大了,快乐是一个大大的峡谷,我在电脑前,对手被我击杀在对线上!!!

 LOL的地图一共就这么几种,最经典的5v5峡谷,极地大乱斗的断桥,还有之前3v3的地图(忘了叫什么了),还有圆形的地图(词穷)……

地图的加载其实很简单,涉及到自动寻路,烘焙,遮挡剔除,动态加载,更新等,所以这里建议把地图场景整体打包成assetbundle,然后热更下载加载即可。

直接上代码:

第一步,设置游戏场景

在淘宝上下载了LOL的峡谷地图,加载进来设置好贴图,然后就是做自动寻路了

我是通过自己放置了面片的方式设置,原始地图是公共区域和野区。

1、2、3分别代表上路中路下路,4代表野区,方便后面做兵线的自动寻路。

第二步,烘焙好后就可以开始打包成场景的assetbundle包了,打包代

码很简单

  1. /// <summary>
  2. /// 编译资源
  3. /// </summary>
  4. /// <param name="targetPath">目标位置</param>
  5. /// <param name="prefabs">预制体</param>
  6. /// <param name="scenes">场景</param>
  7. /// <param name="buildTarget">目标平台</param>
  8. [MenuItem("开始打包/打包Scenes")]
  9. public static void BuildingScenes()
  10. {
  11. try
  12. {
  13. //清空一下缓存
  14. Caching.ClearCache();
  15. UnityEngine.Object[] selects = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets);
  16. //添加资源
  17. for (int i = 0; i < selects.Length; i++)
  18. {
  19. //获得用户选择的路径的方法,可以打开保存面板(推荐)
  20. //string path = EditorUtility.SaveFilePanel("保存资源", "SS", "" + selects[i].name, "unity3d");
  21. string[] path = new string[] { AssetDatabase.GetAssetPath(selects[i]) };
  22. Debug.Log("Path:" + path[0]);
  23. string filepath = Environment.CurrentDirectory + "/DownLoad/Unity3d/" + selects[i].name + ".unity3d";
  24. try
  25. {
  26. BuildPipeline.BuildPlayer(path, filepath, BuildTarget.StandaloneWindows64, BuildOptions.BuildAdditionalStreamedScenes);
  27. Debug.Log("场景打包成功");
  28. }
  29. catch (System.Exception ex)
  30. {
  31. Debug.Log("场景打包失败:" + ex.ToString());
  32. }
  33. }
  34. }
  35. catch (UnityException e)
  36. {
  37. Debug.Log("场景打包失败:" + e.ToString());
  38. }
  39. //刷新编辑器(不写的话要手动刷新,否则打包的资源不能及时在Project视图内显示)
  40. AssetDatabase.Refresh();
  41. }

 这个是打包出来的三个场景,包含峡谷5v5,极地大乱斗断桥,还有那个3v3的地图

 第三步,根据游戏模式加载地图

 这一步,就不多做赘述了,现在移除了3v3的,其它就根据不同游戏模式加载不同地图就好了

  1. //动态加载本地场景
  2. var req = AssetBundle.LoadFromFileAsync(URL);
  3. req.allowSceneActivation = false;
  4. while (req.progress < 0.99f)
  5. {
  6. yield return null;
  7. }
  8. yield return req;
  9. req.allowSceneActivation = true;
  10. assetBundle = req.assetBundle;
  11. string[] scenes = assetBundle.GetAllScenePaths();
  12. string scenespath = Path.GetFileNameWithoutExtension(scenes[0]);
  13. SceneManager.LoadScene(scenespath, LoadSceneMode.Additive);
  14. Scene scene = SceneManager.GetSceneByName(scenespath);
  15. action(scene);
  16. yield return null;
  17. if (assetBundle != null)
  18. {
  19. assetBundle.Unload(false);
  20. }

 最后,祝大家游戏愉快,开发愉快!!

↓↓↓↓

福利环节当然不能少咯!!!!!!!我是懂程序员的!!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/872893
推荐阅读
相关标签
  

闽ICP备14008679号