unity学习(55)——选择角色界面--解析赋值服务器返回的信息2

文章讲述了如何在Unity项目中使用SelectMenu脚本来管理角色选择,包括设置全局静态变量allPlayers、在MessageManager中处理LIST_SRES事件,以及在SelectMenu中实现角色切换和角色名称与等级的显示。
摘要由CSDN通过智能技术生成

准备工作已经完成,下面开始对message的内容进行操作:

1.在SelectMenu.cs中添加一个全局静态变量allPlayers:

2.然后在MessageManager.cs的case UserProtocol.LIST_SRES:部分进行赋值

执行结果符合预期:

 3.在selectMenu中增加一个选择角色按钮,这个是最简单的做法:

4.在SelectMenu中增加选择功能的脚本内容:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using minna;//protocol的命名空间都来自这里
using TMPro;
public class SelectMenu : MonoBehaviour
{
    // Start is called before the first frame update
    //public GameObject c = GameObject.FindWithTag("selectMenuCanvas");
    public GameObject quan;//start中就保存好了
    public int flag = 0;
    public static PlayerModel[] allPlayers;
    public static PlayerModel nowPlayer;
    public static int posPlayer=0;//现在已经随心所欲了
    void Start()
    {
        //gameObject.SetActive(false);
        //GameObject m = GameObject.FindWithTag("selectMenuCanvas");//现在我挂在camera上就可以这么用了
        this.quan = GameObject.FindWithTag("selectMenuCanvas");//同一命名空间即可,canvas在最外边是有道理的
        this.quan.SetActive(false);
        //gameObject.GetComponent<Renderer>.enabled = false;
        //我估计这个放不到这里,应该放到如果登录成功的那里
        //Debug.Log("我估计这个放不到这里,应该放到如果登录成功的那里");//不出所料
        //NetWorkScript.getInstance().sendMessage(Protocol.USER,0,UserProtocol.LIST_CREQ,null);
    }

    // Update is called once per frame
    void Update()//角色的选择和创建我做在一起就可以了
    {
        //Debug.Log(GameInfo.GAME_STATE);//初始状态开始为0
        //Debug.Log(GameState.PLAYER_CREATE); //这个是4
        if (GameInfo.GAME_STATE == GameState.PLAYER_CREATE && this.flag == 0)
        {
            //Debug.Log(GameInfo.GAME_STATE);//初始状态开始为0
            //Debug.Log(GameState.PLAYER_CREATE);
            this.flag = 1;
            Debug.Log("这里计划是只执行一次");
            this.quan.SetActive(true);
        }
    }
    public void GoToCreate()//unity那边想要加载必须public---其实就是createClick
    {
        Debug.Log("我确实进入onclick函数了");
        //这种藏起来的找不着!第二次犯这个错误了
        //下面这两句再次说明了之前false的找不到
        //GameObject panel = GameObject.FindWithTag("createPanel");//同一命名空间即可,canvas在最外边是有道理的
        //panel.SetActive(true);
        Debug.Log(CreatePlayerPanel.panel);
        CreatePlayerPanel.panel.SetActive(true);//用的static实例类--这个卡住了
        Debug.Log("给我弹出创造页面");
    }
    public void changePlayer()
    {
        //
        if (allPlayers != null)//新账号第一次没角色
        {
            TMP_Text a = GameObject.FindWithTag("playerName").GetComponent<TMP_Text>();//得到两个Text对象

            int yushu = allPlayers.Length;
            Debug.Log(yushu);
            if (yushu > 0)
            {
                nowPlayer = allPlayers[posPlayer % yushu];//z这样就实现循环了
                Debug.Log(nowPlayer.name);
                //text显示当前角色的姓名和等级
                a.text = nowPlayer.name +" "+ nowPlayer.level+"级";
                posPlayer = (posPlayer + 1);//静态static直接拿来用就行,不用this
            }
        }
        else 
        {
            //text显示没有角色
            TMP_Text a = GameObject.FindWithTag("playerName").GetComponent<TMP_Text>();
            a.text = "当前账号中没有角色";
        }
    }

}

5.执行结果也满足要求,做一个求余操作就可以快速解决问题,下图切换了三遍。

6,最后在text中显示角色名称和等级,所有的细节都才4的代码中,经过测试确实没有问题。

text挂上一个tag,名字是playerName:

  • 29
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值