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


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

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

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

    执行结果符合预期:

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

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

    1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using UnityEngine;
    5. using minna;//protocol的命名空间都来自这里
    6. using TMPro;
    7. public class SelectMenu : MonoBehaviour
    8. {
    9. // Start is called before the first frame update
    10. //public GameObject c = GameObject.FindWithTag("selectMenuCanvas");
    11. public GameObject quan;//start中就保存好了
    12. public int flag = 0;
    13. public static PlayerModel[] allPlayers;
    14. public static PlayerModel nowPlayer;
    15. public static int posPlayer=0;//现在已经随心所欲了
    16. void Start()
    17. {
    18. //gameObject.SetActive(false);
    19. //GameObject m = GameObject.FindWithTag("selectMenuCanvas");//现在我挂在camera上就可以这么用了
    20. this.quan = GameObject.FindWithTag("selectMenuCanvas");//同一命名空间即可,canvas在最外边是有道理的
    21. this.quan.SetActive(false);
    22. //gameObject.GetComponent.enabled = false;
    23. //我估计这个放不到这里,应该放到如果登录成功的那里
    24. //Debug.Log("我估计这个放不到这里,应该放到如果登录成功的那里");//不出所料
    25. //NetWorkScript.getInstance().sendMessage(Protocol.USER,0,UserProtocol.LIST_CREQ,null);
    26. }
    27. // Update is called once per frame
    28. void Update()//角色的选择和创建我做在一起就可以了
    29. {
    30. //Debug.Log(GameInfo.GAME_STATE);//初始状态开始为0
    31. //Debug.Log(GameState.PLAYER_CREATE); //这个是4
    32. if (GameInfo.GAME_STATE == GameState.PLAYER_CREATE && this.flag == 0)
    33. {
    34. //Debug.Log(GameInfo.GAME_STATE);//初始状态开始为0
    35. //Debug.Log(GameState.PLAYER_CREATE);
    36. this.flag = 1;
    37. Debug.Log("这里计划是只执行一次");
    38. this.quan.SetActive(true);
    39. }
    40. }
    41. public void GoToCreate()//unity那边想要加载必须public---其实就是createClick
    42. {
    43. Debug.Log("我确实进入onclick函数了");
    44. //这种藏起来的找不着!第二次犯这个错误了
    45. //下面这两句再次说明了之前false的找不到
    46. //GameObject panel = GameObject.FindWithTag("createPanel");//同一命名空间即可,canvas在最外边是有道理的
    47. //panel.SetActive(true);
    48. Debug.Log(CreatePlayerPanel.panel);
    49. CreatePlayerPanel.panel.SetActive(true);//用的static实例类--这个卡住了
    50. Debug.Log("给我弹出创造页面");
    51. }
    52. public void changePlayer()
    53. {
    54. //
    55. if (allPlayers != null)//新账号第一次没角色
    56. {
    57. TMP_Text a = GameObject.FindWithTag("playerName").GetComponent();//得到两个Text对象
    58. int yushu = allPlayers.Length;
    59. Debug.Log(yushu);
    60. if (yushu > 0)
    61. {
    62. nowPlayer = allPlayers[posPlayer % yushu];//z这样就实现循环了
    63. Debug.Log(nowPlayer.name);
    64. //text显示当前角色的姓名和等级
    65. a.text = nowPlayer.name +" "+ nowPlayer.level+"级";
    66. posPlayer = (posPlayer + 1);//静态static直接拿来用就行,不用this
    67. }
    68. }
    69. else
    70. {
    71. //text显示没有角色
    72. TMP_Text a = GameObject.FindWithTag("playerName").GetComponent();
    73. a.text = "当前账号中没有角色";
    74. }
    75. }
    76. }

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

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

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

  • 相关阅读:
    Ruby 环境变量
    Java使用mybatis框架调用MySQL存储过程
    如何看待程序员不写注释
    springcloud7:服务注册与发现总结篇
    本地数据库IndexedDB - 学员管理系统之列表管理(二)
    C语言百日刷题第八天
    kubeadm + containerd 部署 k8s-v1.23.3(含证书升级)
    最新ChatGPT支持下的PyTorch机器学习与深度学习
    NodeJS http请求
    kafka详解一
  • 原文地址:https://blog.csdn.net/qq_27863281/article/details/136595651