[3]尝试用Unity3d制作一个王者荣耀(持续更新)->选择英雄-(中)
如果已经看过本章节:目录传送门:这是目录鸭~
上节内容写了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 = -1;
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[0].skinshowmodelpath+ ".assetbundle")
49 .getassetbundle().loadallassets<gameobject>()[0],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 = -1;//重置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 = 0; i < infos.count; i++)//创建ui
82 {
83 packageforassetbundle sprite = assetbundlemanager.assetbundlemanager.
84 getassetbundle(infos[i].actorskins[0].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>()[0]; //设置图标
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 = 0;
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),下一节再见。
如果已经看过本章节:目录传送门:这是目录鸭~