Select场景UI布局

unity FSM角色使用 unity角色选择_客户端

一、两个或者多个客户端进入Select场景时候会向服务器发送消息             

           首先新建一个脚本SelectScene.cs告诉服务器,客户端已经进Select场景

void Start () {
		//告诉服务器客户端已经进入Select场景了(CR表示客户端向服务端发送消息)
		this.WriteMessage(Protocol.TYPE_SELECT,0,SelectProtocol.ENTER_CREQ,null);
	}

   然后要通过消息处理中心NetMessagetUtil.cs把从服务器返回的消息分发到SelectHandler.cs(选择模块儿中)

unity FSM角色使用 unity角色选择_UI_02

SelectHandler.cs的两个Enter方法分情况处理服务器返回的消息区分己方和敌方队伍

unity FSM角色使用 unity角色选择_客户端_03

通信协议里封装好的两个类SelectModel.cs和SelectRoomDTO.cs

SelectRoomDTO.cs是表示一个房间,以房间来划分,一个房间只能有两个队伍即:敌我双方

unity FSM角色使用 unity角色选择_unity FSM角色使用_04

SelectModel.cs表示英雄的一些属性

unity FSM角色使用 unity角色选择_客户端_05

下面是两个Enter方法:区分己方和敌方队伍,刷新UI

 

unity FSM角色使用 unity角色选择_客户端_06

 二、SelectScene.cs刷新己方和敌方左右列表

unity FSM角色使用 unity角色选择_UI_07

unity FSM角色使用 unity角色选择_客户端_08

unity FSM角色使用 unity角色选择_服务器_09

左右列表序列化赋值 

 

unity FSM角色使用 unity角色选择_UI_10

2.1   其中左右列表里英雄单元格

unity FSM角色使用 unity角色选择_服务器_11

:刷新

        刷新单元格名称与头像的类SelectGrid.cs

unity FSM角色使用 unity角色选择_UI_12

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;
    }
}

头像图片资源所在文件夹的位置:

unity FSM角色使用 unity角色选择_客户端_13

2.2 调用刷新左右列表RefreshView方法

      其他类里面调用SelectScene.cs的方法时,为了降低耦合,我们利用委托事件,

    首先定义委托,创建工具类SelectEventUtil.cs

SelectScene.cs里面指定委托

unity FSM角色使用 unity角色选择_unity FSM角色使用_14

最后SelectHandler.cs调用委托,刷新UI

unity FSM角色使用 unity角色选择_unity FSM角色使用_15

三、初始化英雄列表

     3.1   一旦进入场景这个列表就要进行初始化

unity FSM角色使用 unity角色选择_客户端_16

 

unity FSM角色使用 unity角色选择_服务器_17

 

其中每个小单元格元素

unity FSM角色使用 unity角色选择_UI_18

(heroBtn自带Button)挂载的的初始化脚本HeroGrid.cs,

unity FSM角色使用 unity角色选择_服务器_19

3.2    点击

unity FSM角色使用 unity角色选择_UI_18

按钮选择英雄,同时刷新左侧列表

unity FSM角色使用 unity角色选择_客户端_21

每次选择一个英雄,服务器返回告诉客户端选择的是哪一个英雄,然后界面刷新

unity FSM角色使用 unity角色选择_服务器_22

3.3  点击确定按钮,告诉服务器英雄已经选定

unity FSM角色使用 unity角色选择_UI_23

 服务器返回消息

unity FSM角色使用 unity角色选择_服务器_24

四、聊天系统

unity FSM角色使用 unity角色选择_UI_25

点击发送按钮,向服务器发送消息

 

unity FSM角色使用 unity角色选择_服务器_26

对服务器返回的消息进行处理

unity FSM角色使用 unity角色选择_服务器_27

unity FSM角色使用 unity角色选择_UI_28

把相关脚本附在场景中的对象上:

unity FSM角色使用 unity角色选择_unity FSM角色使用_29