Unity尝试制作王者荣耀(十五)英雄选择——Select

本文详细解析游戏Select场景的UI布局与通信流程,包括客户端与服务器交互、英雄选择及队伍区分,通过SelectScene.cs与SelectHandler.cs实现消息处理,以及聊天系统的消息发送与接收机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                       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.csSelectRoomDTO.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  点击确定按钮,告诉服务器英雄已经选定

 服务器返回消息

四、聊天系统

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

 

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值