准备工作已经完成,下面开始对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: