Select场景UI布局
一、两个或者多个客户端进入Select场景时候会向服务器发送消息
首先新建一个脚本SelectScene.cs告诉服务器,客户端已经进Select场景了
void Start () {
//告诉服务器客户端已经进入Select场景了(CR表示客户端向服务端发送消息)
this.WriteMessage(Protocol.TYPE_SELECT,0,SelectProtocol.ENTER_CREQ,null);
}
然后要通过消息处理中心NetMessagetUtil.cs把从服务器返回的消息分发到SelectHandler.cs(选择模块儿中)
SelectHandler.cs的两个Enter方法分情况处理服务器返回的消息区分己方和敌方队伍
通信协议里封装好的两个类SelectModel.cs和SelectRoomDTO.cs
SelectRoomDTO.cs是表示一个房间,以房间来划分,一个房间只能有两个队伍即:敌我双方
SelectModel.cs表示英雄的一些属性
下面是两个Enter方法:区分己方和敌方队伍,刷新UI
二、SelectScene.cs刷新己方和敌方左右列表
左右列表序列化赋值
2.1 其中左右列表里英雄单元格
:刷新
刷新单元格名称与头像的类SelectGrid.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using GameProtocol.dto;
//单元格图像名称的刷新
public class SelectGird : MonoBehaviour {
[SerializeField]
private Text nameText;
[SerializeField]
private Image head;
[SerializeField]
private Image image;
public void Refresh(SelectModel modle)
{
nameText.text = modle.name;
//是否进入
if (modle.enter)
{
//是否点击确定按钮选择了英雄,如果选择了才刷新UI
if (modle.hero==-1)//没有选择英雄
{
head.sprite = Resources.Load<Sprite>("HeroIcon/notenter");
}
else
{
head.sprite = Resources.Load<Sprite>("HeroIcon/"+modle.hero);
}
}
else
{
head.sprite = Resources.Load<Sprite>("HeroIcon/notenter");
}
//英雄是否已经准备好进入战斗场景
if (modle.ready)
{
select();
}
//如果没有点击确定按钮,还没有选择英雄,此时头像是正常颜色
else
{
image.color = Color.white;
}
}
/// <summary>
/// 表示这个英雄已经被选择了
/// </summary>
private void select()
{
image.color = Color.red;
}
}
头像图片资源所在文件夹的位置:
2.2 调用刷新左右列表RefreshView方法
其他类里面调用SelectScene.cs的方法时,为了降低耦合,我们利用委托事件,
首先定义委托,创建工具类SelectEventUtil.cs
在SelectScene.cs里面指定委托
最后SelectHandler.cs调用委托,刷新UI
三、初始化英雄列表
3.1 一旦进入场景这个列表就要进行初始化
其中每个小单元格元素
(heroBtn自带Button)挂载的的初始化脚本HeroGrid.cs,
3.2 点击
按钮选择英雄,同时刷新左侧列表
每次选择一个英雄,服务器返回告诉客户端选择的是哪一个英雄,然后界面刷新
3.3 点击确定按钮,告诉服务器英雄已经选定
服务器返回消息
四、聊天系统
点击发送按钮,向服务器发送消息
对服务器返回的消息进行处理
把相关脚本附在场景中的对象上: