• 字符串数组——传递文本的不同方法实例


    一、实例化一个文本并在文本上直接显示接收的信息
    1、制作一个预制体

    (1) UI-Text (TMP),TitleText

    (2) 给Text (TMP)添加Recipients.cs组件

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using TMPro;
    4. using UnityEngine;
    5. public class Recipients : MonoBehaviour
    6. {
    7. public TextMeshProUGUI TitleText;//在Unity赋值
    8. //接收文本数据
    9. public void initData(string titleText)
    10. {
    11. //在TitleText.text文本中显示接收到的文本内容
    12. TitleText.text = titleText;
    13. }
    14. }

    (3) 将UI-Text (TMP)制成预制体,并从Hierarchy中删除该预制体

    2、给Canvas添加Sender.cs组件

    (1) Sender.cs

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEditor.Experimental.GraphView;
    4. using UnityEngine;
    5. public class Sender : MonoBehaviour
    6. {
    7. public Recipients titleText;
    8. // Start is called before the first frame update
    9. void Start()
    10. {
    11. CreateTitleText();
    12. }
    13. public void CreateTitleText()
    14. {
    15. Recipients t = Instantiate(titleText, this.transform);//调用Recipients.cs实例上的initData方法,并传递一个字符串参数
    16. t.initData("传递方直接传递文本");
    17. }
    18. }

    (2) 赋值

    二、用不同的方法传递文本
    1、通过字符串

    (1) 声明一个字符串

    string strs; //string:类型;   strs:变量名

    (2) 传递

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class Sender : MonoBehaviour
    5. {
    6. public Recipients titleText;//接收方的接收文本
    7. void Start()
    8. {
    9. string str = "直接传输";
    10. CreateTitleText(str);
    11. }
    12. public void CreateTitleText(string transmission)//transmission是自取的名字
    13. {
    14. Recipients t = titleText;
    15. t.initData(transmission);
    16. }
    17. }

    (3) 接收

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using TMPro;
    4. using UnityEngine;
    5. public class Recipients : MonoBehaviour
    6. {
    7. public TextMeshProUGUI TitleText;//在Unity中赋值一个文本(用于接收文本信息)
    8. public void initData(string titleText)//接收的文本命名为titleText
    9. {
    10. TitleText.text = titleText;//在TitleText.text文本中显示接收到的文本内容
    11. }
    12. }

    注意:两个脚本中都要在Unity给文本赋值

    2、声明一个字符串组
    string[] strs = new string[3];     //声明一个字符串数组,且初始化它的长度为3

    (1) string:类型;  []:数组; strs:变量名

    (2) 数组需要初始化之后 才能使用。

    (3) 初始化的方法:类型+[] + 变量名 = new string[3];

    (4) 调用字符串的数据的实例

    发送方:

    1. public Nodes node;
    2. void Start()
    3. {
    4. string[] strs = new string[3]; //声明一个包含三个字符串元素的数组
    5. //string:类型; []:数组; strs:变量名
    6. strs[0] = "strs这个数组中的第一个数据序号为0";//将数组的第一个元素(索引为0)设置为指定的字符串内容
    7. CreateNode(strs[0]);//调用方法,传递整个字符串数组
    8. }
    9. public void CreateNode(string strs)
    10. {
    11. Nodes n = Instantiate(node, this.transform);//创建一个node预制体的实例,并将这个实例赋值给变量n
    12. this.transform:新实例将作为当前对象(脚本所挂载的物体)的子对象
    13. //调用Nodes.cs实例上的initData方法,并传递一个字符串参数
    14. n.initData(strs); //n:node预制体实例;
    15. //n.initData();:调用预制体本身携带的公开的方法(在Nodes脚本中创建的方法)
    16. //括号内要写类型与接收方要求的相同的数据
    17. }

    接收方:

    1. public class Nodes : MonoBehaviour
    2. public TextMeshProUGUI nodeTitle;
    3. public void initData(string titleText)//初始化节点的数据(类型是String;名字是titleText)
    4. //把接收到的文本命名为titleText
    5. //初始化节点的数据,接收一个字符串类型的参数titleText作为标题文本
    6. {
    7. //使用接收到的文本titleText更新nodeTitle文本组件的内容
    8. nodeTitle.text = titleText;//将nodeTitle文本组件的内容设置为接收到的titleText(在nodeTitle.text文本中显示接收到的文本内容)
    9. }

    (5) 优化后的方法

    1. public GameObject nodePrefab; // 在Unity编辑器中设置的预制体
    2. // Start is called before the first frame update
    3. void Start()
    4. {
    5. string[] strs = new string[3]; // 声明一个包含三个字符串元素的数组
    6. strs[0] = "strs这个数组中的第一个数据序号为0"; // 设置数组的第一个元素
    7. // ... 可以设置strs[1]和strs[2]
    8. CreateNode(strs); // 调用方法,传递整个字符串数组
    9. }
    10. public void CreateNode(string[] strs) // 字符串数组
    11. {
    12. GameObject newNode = Instantiate(nodePrefab, this.transform); // 创建预制体的实例
    13. Nodes n = newNode.GetComponent<Nodes>(); // 获取Nodes组件
    14. if (n != null) // 检查是否成功获取到了组件
    15. {
    16. n.initData(strs); // initData方法接受一个字符串数组作为参数
    17. }
    18. else
    19. {
    20. Debug.LogError("No Nodes component found on the instantiated prefab!");
    21. }
    22. }
    3、利用List传递文本

    (1) 声明并 初始化变量

    List<string> strs_02 = new List<string>();//声明并初始化一个名为strs_02,类型为List<string> 的变量

    (2) 调用变量:

    类型一:调用数组中的变量

    strs_02.Add(strs[0]);

    strs_02:变量名

    Add:调用

    (strs[0]):strs数组中的索引号为0的值

    类型2:直接调用字符串

    strs_02.Add("strs[0]");

    strs_02:变量名

    Add:调用

    ("strs[0]"):输出的是双引号内的文字

    1. // 将strs数组的第一个元素添加到strs_02列表中
    2. strs_02.Add(strs[0]);//第一个Add,后面跟的就是strs_02中的序号为0的数据。在这里调用的是strs数组中序号为0的字符串
    3. // 添加字符串"strs[0]"到strs_02列表中,而不是数组strs的某个元素
    4. strs_02.Add("strs[0]");//注意:这里添加的是字面上的字符串"strs[0]",而不是strs数组中的某个值

    (3) 实例:

    繁琐但超小白注释:

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class Test : MonoBehaviour
    5. {
    6. public Nodes node;
    7. // Start is called before the first frame update
    8. void Start()
    9. {
    10. string[] strs = new string[3]; //声明一个字符串数组,并分配了3个元素的空间
    11. //string:类型; []:数组; strs:变量名
    12. //数组需要初始化之后 才能使用。初始化的方法:……= new string[3];
    13. //这一步已经完成了初始化
    14. //将数组的第一个元素(索引为0)设置为指定的字符串内容
    15. strs[0] = "strs这个数组中的第一个数据序号为0";//给数组的第一个位置(索引0)赋值
    16. strs[1] = "测试序号1";
    17. strs[2] = "测试序号2";
    18. // 声明并初始化一个空的List<string>类型的变量,名字为strs_02
    19. List<string> strs_02 = new List<string>();
    20. // 将strs数组的第一个元素添加到strs_02列表中
    21. strs_02.Add(strs[0]);//第一个Add,后面跟的就是strs_02中的序号为0的数据。在这里调用的是strs数组中序号为0的字符串
    22. // 添加字符串"strs[0]"到strs_02列表中,而不是数组strs的某个元素
    23. strs_02.Add("strs[0]");//注意:这里添加的是字面上的字符串"strs[0]",而不是strs数组中的某个值
    24. // 调用CreateNode方法,传递strs_02列表中的第一个元素作为参数
    25. CreateNode(strs_02[0]);//传递的是"strs这个数组中的第一个数据序号为0"这段文字
    26. // 调用CreateNode方法,传递strs_02列表中的第二个元素作为参数
    27. CreateNode(strs_02[1]);//传递的是strs_02中的序号为1的数据,即:"strs[0]"这段文字
    28. }
    29. public void CreateNode(string strs)
    30. {
    31. Nodes n = Instantiate(node, this.transform);//创建一个node预制体的实例,并将这个实例赋值给变量n
    32. //node:要实例化的预制体;this.transform:新实例将作为当前对象(脚本所挂载的物体)的子对象
    33. //调用Nodes.cs实例上的initData方法,并传递一个字符串数组的参数
    34. n.initData(strs); //n:node预制体实例;
    35. //n.initData();:调用预制体本身携带的公开的方法(在Nodes脚本中创建的方法)
    36. //括号内要写类型与接收方要求的相同的数据
    37. }
    38. }

    普通小白注释

    1. public Nodes nodePrefab;//Nodes.cs中的node预制体
    2. void Start()
    3. {
    4. string[] strs = new string[3]; // 声明并初始化字符串数组
    5. strs[0] = "strs这个数组中的第一个数据序号为0";//赋值
    6. strs[1] = "测试序号1";
    7. strs[2] = "测试序号2";
    8. List<string> strs_02 = new List<string>(); // 声明并初始化List<string>
    9. strs_02.Add(strs[0]); // 添加数组的第一个元素到列表
    10. strs_02.Add("strs[0]"); // 添加字符串"strs[0]"到列表
    11. // 调用CreateNode方法,传递strs_02列表中的元素作为参数
    12. CreateNode(strs_02[0]); // 传递列表中的第一个元素
    13. CreateNode(strs_02[1]); // 传递列表中的第二个元素
    14. }
    15. public void CreateNode(string data)
    16. {
    17. Nodes n = Instantiate(nodePrefab, this.transform); // 实例化Nodes预制体
    18. n.initData(data); // 调用initData方法,传递数据给节点进行初始化
    19. }

    直接上手试版本:

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class Test : MonoBehaviour
    5. {
    6. public Nodes node;
    7. void Start()
    8. {
    9. string[] strs = new string[3];
    10. strs[0] = "输出的是数组中的文字";
    11. strs[1] = "测试序号1";
    12. strs[2] = "测试序号2";
    13. List<string> strs_02 = new List<string>();
    14. strs_02.Add(strs[0]);
    15. strs_02.Add("输出的是Add.后面括号里面双引号里面的文字");
    16. CreateNode(strs_02[0]);
    17. CreateNode(strs_02[1]);
    18. }
    19. public void CreateNode(string data)
    20. {
    21. Nodes n = Instantiate(node, this.transform);
    22. n.initData(data);
    23. }
    24. }
    4、利用Dictionary传递文本
    Dictionary<int,string> strs3= new Dictionary<int,string>();//声明并初始化字典,名字是strs3

    Dictionary

    作用:加了索引的列表。给每个数据都取了个名字,方法查找、修改、调用数据

    解释:

    Dictionary:字典

    :int——键的类型(整数)         string:值的类型——字符串

    添加数据:

    strs3.Add(1001, "文本内容");

    调用

    TransferTitleText(strs3[1001]);

  • 相关阅读:
    阿里云周宇:神龙计算平台智能运维体系建设
    未来的编程语言「GitHub 热点速览」
    【机器学习知识点】【1】二维与三维空间梯度下降微分求解及可视化展示
    第三百八十六回
    『大模型笔记』MIT 最新的科尔莫戈洛夫-阿诺德网络(Kolmogorov-Arnold Network,KAN)简介
    JS 中的正则
    什么是突发性耳聋?
    正则表达式提取http和http内容
    在VmWare中安装Centos7
    小程序壁纸demo,数据采集第三方的,没有服务端
  • 原文地址:https://blog.csdn.net/weixin_58362372/article/details/139663421