12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 7710|回复: 13
打印 上一主题 下一主题

[教程] Unity3D角色信息列表or(存档)制作xml版(2)

[复制链接]

3

主题

2

听众

177

积分

设计实习生

Rank: 2

纳金币
55
精华
0

最佳新人

跳转到指定楼层
楼主
发表于 2013-12-30 10:05:44 |只看该作者 |倒序浏览
接上一篇,运行效果如下:
13.jpg
嗯现在大家可以看到已经可以输入了,现在咱们再回到脚本上来,新建一个C#脚本,命名为CreateRole,脚本如下:
  1. using UnityEngine;
  2. using System.Collections;
  3. using System;
  4. public class CreateRole : MonoBehaviour {
  5.         private XmlDataStructure role ;
  6.         private XmlManager xmlMan ;
  7.         /// <summary>
  8.         /// The name input.获取几个input,得到他们的内容
  9.         /// </summary>
  10.         public UIInput nameInput ;
  11.         public UIInput occuInput ;
  12.         public UIInput levelInput ;
  13.         public UIInput expInput ;
  14.        
  15.         public UIButton _backlaod ;
  16.         void Start(){
  17.                 xmlMan = new XmlManager();

  18.                 EventDelegate.Add(_backlaod.onClick,delegate() {
  19.                         //Application.LoadLevel(1);
  20.         });
  21.         }
  22.         /// <summary>
  23.         /// Raises the click event.点击创建按钮新建一个角色,然后添加到xml文件里面去
  24.         /// </summary>
  25.         void OnClick(){
  26.                 try{
  27.                         if(xmlMan.GetDataFromXml(XmlManager.XmlRandS.xml_role).Count >=5){
  28.                                 print("你已经拥有5个角色,如果需要继续创建,请先删除");
  29.                         }else{
  30.                                 role = new XmlDataStructure(nameInput.value,
  31.                                                             occuInput.value,
  32.                                                             Convert.ToInt32(levelInput.value),
  33.                                                             Convert.ToInt32(expInput.value),
  34.                                                             DateTime.Now.ToShortDateString());
  35.                                 xmlMan.AddRole(role,XmlManager.XmlRandS.xml_role);
  36.                                 //Application.LoadLevel(1);
  37.                         }
  38.                 }
  39.                 catch{
  40.                         print("请输入正确的格式like,int 、 int 、 string 、 string");
  41.                 }
  42.         }
  43. }
复制代码
这个脚本的目的是读取input里面的内容,然后写入到xml文件里面去,然后通过给按返回登录钮添加委托,实现界面的跳转(当然啦这里大家可以不用委托,在写个脚本给返回登录按钮,在OnClick里面调用loadlevel也行,不过我觉得这样脚本多了不好控制);
把这个脚本绑给Create按钮,并且把上面的那几个input分别拖进去对应起来,将Load按钮托给_load变量,那么输入后,点击Create后,我们退出后可以看到项目下面多出了一个xmlDir的文件夹,里面有Role和Save这2个xml文件,并且Role里面的内容就是刚才输入的信息,效果如下:

15.jpg
好了接下来我们开始做角色列表,在Prefabs下创建一个叫UIPrefab的Prefab,然后将UIRoot拖给这个Prefab形成一个预设,再将这个scene保存,然后新建一个scene,将UIPrefab拖进去,然后删掉delete按钮,把Create身上的CreateRole脚本删掉并将Create按钮复制2个,并改名Delete和Load,然后将他们的label分别改为:返回创建、删除角色、进入游戏,继续将Info的panel的所有子项清空,结果如下:

16.jpg
然后在panel下创建一个Toggle并命名为RoleListItem,修改它的Label位置最终效果如下:

17.jpg
然后我们再去编写脚本,新建一个C#脚本,并命名为RoleListItem,这个脚本很简单,只是声明一个xmldatastructure变量与这个item绑定,代码如下:
  1. using UnityEngine;
  2. using System.Collections;

  3. public class RoleListItem : MonoBehaviour {
  4.         public XmlDataStructure roleData ;
  5.         // Use this for initialization
  6.         void Awake(){
  7.                 roleData = new XmlDataStructure();
  8.                 EventDelegate.Add(GetComponent<UIButton>().onClick,delegate() {
  9.                         //print(roleData.id);
  10.                 });
  11.         }


  12.         // Update is called once per frame
  13.         void Update () {

  14.         }
  15. }
复制代码
怎么样这代码很简单吧,后面会用到这个roleData,然后我们再新建一个脚本命名为RoleList,这个脚本用来读取xml文件的角色信息,并制作一个列表显示,其中又用到了委托,给按钮添加事件,代码如下:
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;

  4. public class Rolelist : MonoBehaviour {
  5.         /// <summary>
  6.         /// The _create.声明3个按钮变量
  7.         /// </summary>
  8.         public UIButton _create ;
  9.         public UIButton _delete ;
  10.         public UIButton _load ;

  11.         private XmlManager xmlMan ;
  12.         /// <summary>
  13.         /// The roles list.声明一个存放角色的线性表
  14.         /// </summary>
  15.         private List<XmlDataStructure> rolesList ;
  16.         /// <summary>
  17.         /// The item prefab.这个是item预设
  18.         /// </summary>
  19.         public GameObject itemPrefab ;
  20.         // Use this for initialization
  21.         void Start () {
  22.                 xmlMan = new XmlManager();
  23.                 LoadRoles();
  24.                 /// <summary>
  25.                 /// EventDelegate.给3个按钮添加事件
  26.                 /// </summary>
  27.                 EventDelegate.Add(_create.onClick,delegate() {
  28.                         Application.LoadLevel(0);
  29.                 });
  30.                 EventDelegate.Add(_delete.onClick,delegate() {
  31.                         try{
  32.                                 xmlMan.RemoveItemById(UIToggle.GetActiveToggle(1).gameObject.GetComponent<RoleListItem>().roleData.id,
  33.                                                       XmlManager.XmlRandS.xml_role);
  34.                                 Destroy(UIToggle.GetActiveToggle(1).gameObject);
  35.                                 gameObject.GetComponent<UITable>().Reposition();
  36.                         }catch{
  37.                                 print("您还没有角色,请先创建角色");
  38.                         }
  39.                 });
  40.                 EventDelegate.Add(_load.onClick,delegate() {
  41.                         try{
  42.                                 print("你选择登录的角色信息为:"+UIToggle.GetActiveToggle(1).gameObject.GetComponent<RoleListItem>().roleData.id+
  43.                                       "姓名:"+UIToggle.GetActiveToggle(1).gameObject.GetComponent<RoleListItem>().roleData.name+
  44.                                       "门派:"+UIToggle.GetActiveToggle(1).gameObject.GetComponent<RoleListItem>().roleData.occupation);
  45.                         }catch{
  46.                                 print("请选择要登录的角色");
  47.                         }
  48.                 });
  49.         }
  50.         /// <summary>
  51.         /// Loads the roles.从xml文件读取信息,并创建item然后将信息与item绑定
  52.         /// </summary>
  53.         void LoadRoles(){
  54.                 rolesList = new List<XmlDataStructure>();
  55.                 rolesList = xmlMan.GetDataFromXml(XmlManager.XmlRandS.xml_role);
  56.                 foreach(XmlDataStructure role in rolesList){
  57.                         GameObject itemClone = (GameObject)Instantiate(itemPrefab,transform.position,Quaternion.identity);
  58.                         itemClone.transform.parent = this.transform;
  59.                         itemClone.transform.localScale = new Vector3(1,1,1);
  60.                         RoleListItem itemScript = itemClone.GetComponent<RoleListItem>();
  61.                         itemScript.roleData.id = role.id ;
  62.                         itemScript.roleData.occupation = role.occupation;
  63.                         itemScript.roleData.name = role.name;
  64.                         itemScript.roleData.level = role.level;
  65.                         itemScript.roleData.freeExp = role.freeExp;
  66.                         itemScript.roleData.createtime = role.createtime;
  67.                         itemClone.GetComponentInChildren<UILabel>().text = "名称:"+itemScript.roleData.name+
  68.                                                                                                                            "\n门派:"+itemScript.roleData.occupation+
  69.                                                                                                                            "\n等级:"+itemScript.roleData.level+
  70.                                                                                    "\n时间:"+itemScript.roleData.createtime;
  71.                 }
  72.                 //gameObject.GetComponent<UITable>().Reposition
  73.         }
  74.         // Update is called once per frame
  75.         /// <summary>
  76.         /// Update this instance.如果当前没有选择角色或者没有角色,删除和进入游戏按钮不可用
  77.         /// </summary>
  78.         void Update () {
  79.                 if(rolesList.Count <= 0 || UIToggle.GetActiveToggle(1) == null){
  80.                         _load.enabled = false ;
  81.                         _delete.enabled = false ;
  82.                 }else{
  83.                         _load.enabled = true ;
  84.                         _delete.enabled = true ;
  85.                 }
  86.         }
  87. }
复制代码
然后我们将RoleListItem脚本与RoleListItem这个物体绑定,新建一个预设,将RoleListItem这个Toggle拖进去,形成一个预设,删掉Info的子panel下的RoleListItem,然后将RoleList脚本拖给Info下的panel,并将上面的按钮变量正确的拖进去,其中的itemPrefab就是刚才新建的RolelistItem预设,效果如图:
18.jpg
然后我们将工程built设置一下,要按图中的顺序啊,如图:
19.jpg
然后将CreateRole脚本里面的Application.LoadLevel(1);(有2个地方有,共有2句,很好找)的注释去掉,现在我们跳转到第一个Scene,然后运行可以看到结果,当跳转到第2个场景的时候就有了刚才创建的角色信息了:第二个场景效果如图
20.jpg
好了到现在为止咱们做了角色信息的列表,如果是存档的话其中的输入就变成了玩家进入存档点时记录的信息了,原理是一样的,小弟将在以后的帖子中实现存档的制作。
下面是工程源码和我用到的NGUI



NGUI Next-Gen UI v3.0.6 f7.rar

17.39 MB, 下载次数: 334

NGUI

RoleList.zip

17.39 MB, 下载次数: 560

源码

已有 1 人评分纳金币 收起 理由
艾西格亚 + 5

总评分: 纳金币 + 5   查看全部评分

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏2 支持支持0 反对反对0
回复

使用道具 举报

0

主题

0

听众

6661

积分

高级设计师

Rank: 6Rank: 6

纳金币
168
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2013-12-30 10:22:02 |只看该作者
great stuff
回复

使用道具 举报

2

主题

9

听众

6387

积分

高级设计师

Rank: 6Rank: 6

纳金币
881
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2013-12-30 21:54:37 |只看该作者
好东西
回复

使用道具 举报

0

主题

1

听众

172

积分

设计实习生

Rank: 2

纳金币
5
精华
0

最佳新人

地板
发表于 2013-12-30 23:26:48 |只看该作者
............
回复

使用道具 举报

0

主题

1

听众

172

积分

设计实习生

Rank: 2

纳金币
5
精华
0

最佳新人

5#
发表于 2014-1-3 14:29:44 |只看该作者
luguo!!!!!!!!!!!!!!!!!
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2014-1-4 02:31:08 |只看该作者
Cool thank you
回复

使用道具 举报

1

主题

1

听众

1391

积分

助理设计师

Rank: 4

纳金币
5
精华
0
7#
发表于 2014-1-17 15:16:24 |只看该作者
介个,学习了,好东西
回复

使用道具 举报

0

主题

5

听众

412

积分

设计实习生

Rank: 2

纳金币
40
精华
0

最佳新人

8#
发表于 2014-1-20 15:30:31 |只看该作者
学习了,好东西
回复

使用道具 举报

0

主题

3

听众

2200

积分

中级设计师

Rank: 5Rank: 5

纳金币
0
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2014-2-20 23:39:03 |只看该作者
新人学习,谢谢分享
回复

使用道具 举报

0

主题

1

听众

72

积分

设计初学者

Rank: 1

纳金币
1
精华
0
10#
发表于 2014-3-11 16:51:54 |只看该作者
学习unity的好教程!辛苦了,感谢分享!!!!
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-5 09:18 , Processed in 0.111175 second(s), 44 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部