如果已经看过本章节:目录传送门:这是目录鸭~

上节内容写了Actor管理器,那么这一节让我们先创建一个角色。(此章节开始加速...)

1.制作角色展示AssetBundle:

提取农药某个展示模型(Show)资源(这步具体去百度),然后再把模型制作成预制体,AssetBundle命名规则按照农药的(ID_游戏拼音_资源类型.assetbundle):

制作UI预制体,还是得提取或者去农药官网 pvp.qq.com 的壁纸中心下载原图截取(一个是图标一个是加载时候用到的):

创建一个空物体,并挂上ActorInfo组件,制作成预制体并输入数据(虽然标签以及打包的文件都是小写的,但按照路径读取文件的时候不会区分大小写,为了好看于是可以大写):

到这步先不要打包,后面还有小部件需要打包的。

2.拼UI(最舒适的部分~):

创建一个滚动视图,并且在Content位置增加自动布局组件,再创建空对象改名Mode,里面存放两个按钮用来切换皮肤和英雄选择,如图:

拉几下几下位置,最终效果:

然后我们制作一个预制体,用于动态生成(结构是一个空物体里面有个按钮(已把里面文字删去)和一个 名字 的 文本显示组件):

把预制体粘贴到Content里面测试有没有问题(是否自动对齐):

测试放上去的内容记得删除,设置预制体标签:

然后我们写一个代码用于管理选择英雄的UI响应的(前SelectionListManager)和 按钮回调的(后HeroItemButton):

  1. /*
  2. * 编辑者:Miku酱
  3. * 版本:1
  4. * 首次编写日期:2019/09/20 00:05
  5. * 修改日期:2019/09/20 00:05
  6. * 强行加一行~~~
  7. */
  8. using System.Collections;
  9. using System.Collections.Generic;
  10. using UnityEngine;
  11. using LuoHao.Actor;
  12. using UnityEngine.UI;
  13. using LuoHao.AssetBundleManager;
  14.  
  15. namespace LuoHao.PVP.Selection
  16. {
  17. public class SelectionListManager : MonoBehaviour
  18. {
  19. public Transform testPos;
  20.  
  21. /// <summary>
  22. /// 接口
  23. /// </summary>
  24. public static SelectionListManager selectionListManager;
  25.  
  26. /// <summary>
  27. /// UI的AB包路径
  28. /// </summary>
  29. static string uiPath = "UGUI_Selection_0.assetbundle";
  30. [Header("父对象")]
  31. public Transform UIparent;
  32. /// <summary>
  33. /// 当前选择的英雄ID
  34. /// </summary>
  35. private int nowSelectionID = -;
  36.  
  37. GameObject testGM = null;
  38. /// <summary>
  39. /// 设置ID
  40. /// </summary>
  41. /// <param name="id">id</param>
  42. public void SetSelectionID(int id)
  43. {
  44. if (nowSelectionID == id) return;
  45. nowSelectionID = id;
  46. if (testGM != null) Destroy(testGM);
  47. Transform tr = Instantiate(AssetBundleManager.AssetBundleManager.
  48. GetAssetBundle(ActorManager.allActor[id].actorSkins[].skinShowModelPath+ ".assetbundle")
  49. .GetAssetBundle().LoadAllAssets<GameObject>()[],testPos).transform;
  50. tr.localPosition = Vector3.zero;
  51. }
  52.  
  53. public int GetSelectionID()
  54. {
  55. return nowSelectionID;
  56. }
  57.  
  58. private void Awake()
  59. {
  60. selectionListManager = this;
  61. nowSelectionID = -;//重置ID
  62. }
  63. // Start is called before the first frame update
  64. private void Start()
  65. {
  66. LoadList();
  67. }
  68.  
  69. // Update is called once per frame
  70. private void Update()
  71. {
  72.  
  73. }
  74.  
  75. private void LoadList()
  76. {
  77. //取得预制体
  78. GameObject btn =AssetBundleManager.AssetBundleManager.
  79. GetAssetBundle(uiPath).GetAssetBundle().LoadAsset<GameObject>("HeroBtn");
  80. List<ActorInfoData> infos = new List<ActorInfoData>(ActorManager.allActor.Values);//取得信息...
  81. for(int i = ; i < infos.Count; i++)//创建UI
  82. {
  83. PackageForAssetBundle sprite = AssetBundleManager.AssetBundleManager.
  84. GetAssetBundle(infos[i].actorSkins[].skinIconPath+".assetbundle");
  85. //取得图标资源
  86. Transform tr = Instantiate(btn, UIparent).transform;
  87. tr.GetComponentInChildren<Text>().text = infos[i].actorName;//设置名字
  88. tr.GetComponentInChildren<Image>().sprite= sprite.GetAssetBundle().LoadAllAssets<Sprite>()[]; //设置图标
  89. tr.GetComponentInChildren<HeroItemButton>().heroID = infos[i].actorID;//设置ID
  90. sprite.UnLoadAssetBundle(false);//卸载
  91. }
  92. }
  93. }
  94. }
  1. /*
  2. * 编辑者:Miku酱
  3. * 版本:1
  4. * 首次编写日期:2019/09/20 00:05
  5. * 修改日期:2019/09/20 00:05
  6. * 强行加一行~~~
  7. */
  8. using System.Collections;
  9. using System.Collections.Generic;
  10. using UnityEngine;
  11.  
  12. namespace LuoHao.PVP.Selection
  13. {
  14. public class HeroItemButton : MonoBehaviour
  15. {
  16. /// <summary>
  17. /// 这个由代码来设置
  18. /// </summary>
  19. [HideInInspector]
  20.  
  21. public int heroID = ;
  22. public void OnClick()
  23. {
  24. SelectionListManager.selectionListManager.SetSelectionID(heroID);//调用更改ID
  25.  
  26. }
  27. }
  28. }

然后在回到按钮,挂上HeroItemButton并设置按钮回调OnClick:

再再选择英雄的场景中创建一个空物体(SelectionListManager),拖入展示位置和滚动视图的Content:

3.试运行:

这时候我们点击一下AssetBundle打包,让程序飞一会~

在一个用于测试的空对象(没有就创建)挂上ActorManager:

并输入刚刚创建的阿离的ActorInfo文件的位置(这里就要带后缀了,可以通过修改代码来免除加后缀):

然后运行:

我这边因为临时写了个动画的管理的所以有出场动画展示,这个后面才讲。

出现了动图里面的效果就说明成功啦!

不早了( 2019/09/20 00:30),下一节再见。

如果已经看过本章节:目录传送门:这是目录鸭~

[3]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(中)的更多相关文章

  1. [1]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(上)

    如果已经看过本章节:目录传送门:这是目录鸭~ 1.场景搭建: 首先我们去AssetStore逛淘宝~~~ 我淘到的是这个资源,其他好看的场景(消耗不高的都行). 然后我们导入了这个资源后,把资源根文件 ...

  2. [0]尝试用Unity3d制作一个王者荣耀(持续更新)->游戏规划

    太得闲了于是想写个农药,虽然可能会失败但是还是要试一试. 因为是自学的不是Unity专业的可能表达语言会有些不标准!望见谅! 结构: 以组件式(比如说摇杆控制和玩家部分的编写是分离的,可以自由拼装)作 ...

  3. [1]尝试用Unity3d制作一个王者荣耀(持续更新)->AssetBundle管理器

    如果已经看过本章节:目录传送门:这是目录鸭~ 1.AssetBundleManager: 首先我们创建一个文件夹,叫AssetBundleManager,再创建Csharp(即C#)脚本,名为Asse ...

  4. 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能

    [背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ...

  5. 尝试用kotlin做一个app(二)

    导航条 我想实现的效果是这样的 类似于ViewPager的效果,子类导航页面可以滑动,当滑动某个子类导航页面,导航线会平滑地向父类导航移动 ·添加布局 <!--导航分类:编程语言/技术文档/源码 ...

  6. 一个简单的批量更新oracle 数据库中 最近的服务商名称的数据

    有一个需求是这样的,我们需要更新数据库中的数据,数据时这样的 1.大约50万以上 2. 数据中有较多的重复数据 3. 需要将表中最近的代理商的名称赋值给行中的服务商名称 4. 代理商的名称可能有多个, ...

  7. 尝试用kotlin做一个app(五)

    JSP后台管理系统 开发工具是IntelliJ IDEA+tomcat+mysql5.6.19+mysql-connector-java-5.1.48.jar+easyui+kindeditor 之前 ...

  8. 尝试用kotlin做一个app(四)

    本来是应该为主页加载数据库数据了,但是想着做后台,之前写jsp后台写吐了,所以先拖几天.把之前的代码完善一下,或者添加些新内容. ...... 多个fragment切换卡顿 首先修正一个bug.从主页 ...

  9. 尝试用kotlin做一个app(三)

    新闻列表 添加新闻列表可以使用RecyclerView.但是有个问题,RecyclerView只会在内部滚动,不会带动整个屏幕滚动.所以在原根布局外层添加androidx.core.widget.Ne ...

随机推荐

  1. java NIO知多少

    背景 Linux系统中的IO操作内部相当复杂,下面是一张带图片的LinuxIO相关层级关系: 下面是一个简化版本Linux内部IO层级图: 对此我的理解,java程序员版本的IO理解: java中的I ...

  2. lnmp环境搭建方法

    网上目前的一键搭建方法: 命令行安装: 1.源码编译安装:(个性化配置,安装配置过程繁琐) 2.使用yum或apt直接安装:(使用编译好的二进制文件安装,速度快) 3.军哥的lnmp一键脚本安装: 4 ...

  3. T-SQL基础语句

    存储过程允许标准组件式编程(模块化设计) 存储过程能够实现快速的执行速度 存储过程能够减少网络流量 存储过程可被作为一种安全机制充分利用 在SQL Server 的系列版本中存储过程分为两类:系统提供 ...

  4. HBase的高可用(HA)

    在公司写文档时候查到的一些资料,感觉对自己很有帮助,现在整理如下: 介绍 HBase是一个高可靠性.高性能.列存储.可伸缩.实时读写的分布式数据库系统,基于列的存储模式适合于存储非结构化数据. 适用场 ...

  5. vue路由传参的三种方式以及解决vue路由传参页面刷新参数丢失问题

    最近项目中涉及到跨页面传参数和后台进行数据交互,看到需求之后第一反应就是用路由传参来解决:Vue中给我们提供了三种路由传参方式,下面我们一个一个的来看一下: 方法一:params传参: this.$r ...

  6. Kali Linux-装机后通用配置

    目录 前言 一. 网络优化 更换host 更换dns 添加源 二. 更新系统 三 .安装N卡驱动 四.修复 add-apt-repository 五.安装常用软件 安装apt自带的包 安装第三方的de ...

  7. DBUtils框架的使用(下)

    刚才讲了使用QueryRunner插入.修改.更新数据,现在来学习一下使用QueryRunner进行数据库表查询. 通过QueryRunner类的query()方法即可完成数据库表的查询操作,但是在查 ...

  8. Keras实例教程(2)

    https://blog.csdn.net/baimafujinji/article/details/78385745

  9. 【转】Python实现智能五子棋

    前言 棋需要一步一步下,人生需要一步一步走.千里之行,始于足下,九层之台,起于累土. 用Python五子棋小游戏. 基本环境配置 版本:Python3 相关模块: 本文所做工作如下: (1) 五子棋界 ...

  10. MSIL实用指南-生成break和continue

    break和continue本质都是标签的跳转