一、实例化一个文本并在文本上直接显示接收的信息
1、制作一个预制体
(1) UI-Text (TMP),TitleText
(2) 给Text (TMP)添加Recipients.cs组件
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;public class Recipients : MonoBehaviour
{public TextMeshProUGUI TitleText;//在Unity赋值//接收文本数据public void initData(string titleText){//在TitleText.text文本中显示接收到的文本内容TitleText.text = titleText;}
}
(3) 将UI-Text (TMP)制成预制体,并从Hierarchy中删除该预制体
2、给Canvas添加Sender.cs组件
(1) Sender.cs
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;public class Sender : MonoBehaviour
{public Recipients titleText;// Start is called before the first frame updatevoid Start(){CreateTitleText();}public void CreateTitleText(){Recipients t = Instantiate(titleText, this.transform);//调用Recipients.cs实例上的initData方法,并传递一个字符串参数t.initData("传递方直接传递文本"); }
}
(2) 赋值
二、用不同的方法传递文本
1、通过字符串:
(1) 声明一个字符串
string strs; //string:类型; strs:变量名
(2) 传递
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Sender : MonoBehaviour
{public Recipients titleText;//接收方的接收文本void Start(){string str = "直接传输";CreateTitleText(str);}public void CreateTitleText(string transmission)//transmission是自取的名字{Recipients t = titleText;t.initData(transmission); }
}
(3) 接收
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;public class Recipients : MonoBehaviour
{public TextMeshProUGUI TitleText;//在Unity中赋值一个文本(用于接收文本信息)public void initData(string titleText)//接收的文本命名为titleText{TitleText.text = titleText;//在TitleText.text文本中显示接收到的文本内容}
}
注意:两个脚本中都要在Unity给文本赋值
2、声明一个字符串组
string[] strs = new string[3]; //声明一个字符串数组,且初始化它的长度为3
(1) string:类型; []:数组; strs:变量名
(2) 数组需要初始化之后 才能使用。
(3) 初始化的方法:类型+[] + 变量名 = new string[3];
(4) 调用字符串的数据的实例
发送方:
public Nodes node;void Start(){string[] strs = new string[3]; //声明一个包含三个字符串元素的数组//string:类型; []:数组; strs:变量名strs[0] = "strs这个数组中的第一个数据序号为0";//将数组的第一个元素(索引为0)设置为指定的字符串内容CreateNode(strs[0]);//调用方法,传递整个字符串数组}public void CreateNode(string strs){Nodes n = Instantiate(node, this.transform);//创建一个node预制体的实例,并将这个实例赋值给变量nthis.transform:新实例将作为当前对象(脚本所挂载的物体)的子对象//调用Nodes.cs实例上的initData方法,并传递一个字符串参数n.initData(strs); //n:node预制体实例;//n.initData();:调用预制体本身携带的公开的方法(在Nodes脚本中创建的方法)//括号内要写类型与接收方要求的相同的数据}
接收方:
public class Nodes : MonoBehaviourpublic TextMeshProUGUI nodeTitle;public void initData(string titleText)//初始化节点的数据(类型是String;名字是titleText)//把接收到的文本命名为titleText//初始化节点的数据,接收一个字符串类型的参数titleText作为标题文本{//使用接收到的文本titleText更新nodeTitle文本组件的内容nodeTitle.text = titleText;//将nodeTitle文本组件的内容设置为接收到的titleText(在nodeTitle.text文本中显示接收到的文本内容)}
(5) 优化后的方法
public GameObject nodePrefab; // 在Unity编辑器中设置的预制体// Start is called before the first frame updatevoid Start(){string[] strs = new string[3]; // 声明一个包含三个字符串元素的数组strs[0] = "strs这个数组中的第一个数据序号为0"; // 设置数组的第一个元素// ... 可以设置strs[1]和strs[2]CreateNode(strs); // 调用方法,传递整个字符串数组}
public void CreateNode(string[] strs) // 字符串数组{GameObject newNode = Instantiate(nodePrefab, this.transform); // 创建预制体的实例Nodes n = newNode.GetComponent<Nodes>(); // 获取Nodes组件if (n != null) // 检查是否成功获取到了组件{n.initData(strs); // initData方法接受一个字符串数组作为参数}else{Debug.LogError("No Nodes component found on the instantiated prefab!");}}
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]"):输出的是双引号内的文字
// 将strs数组的第一个元素添加到strs_02列表中strs_02.Add(strs[0]);//第一个Add,后面跟的就是strs_02中的序号为0的数据。在这里调用的是strs数组中序号为0的字符串// 添加字符串"strs[0]"到strs_02列表中,而不是数组strs的某个元素strs_02.Add("strs[0]");//注意:这里添加的是字面上的字符串"strs[0]",而不是strs数组中的某个值
(3) 实例:
繁琐但超小白注释:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Test : MonoBehaviour
{public Nodes node;// Start is called before the first frame updatevoid Start(){string[] strs = new string[3]; //声明一个字符串数组,并分配了3个元素的空间//string:类型; []:数组; strs:变量名//数组需要初始化之后 才能使用。初始化的方法:……= new string[3];//这一步已经完成了初始化//将数组的第一个元素(索引为0)设置为指定的字符串内容strs[0] = "strs这个数组中的第一个数据序号为0";//给数组的第一个位置(索引0)赋值strs[1] = "测试序号1";strs[2] = "测试序号2";// 声明并初始化一个空的List<string>类型的变量,名字为strs_02List<string> strs_02 = new List<string>();// 将strs数组的第一个元素添加到strs_02列表中strs_02.Add(strs[0]);//第一个Add,后面跟的就是strs_02中的序号为0的数据。在这里调用的是strs数组中序号为0的字符串// 添加字符串"strs[0]"到strs_02列表中,而不是数组strs的某个元素strs_02.Add("strs[0]");//注意:这里添加的是字面上的字符串"strs[0]",而不是strs数组中的某个值// 调用CreateNode方法,传递strs_02列表中的第一个元素作为参数CreateNode(strs_02[0]);//传递的是"strs这个数组中的第一个数据序号为0"这段文字// 调用CreateNode方法,传递strs_02列表中的第二个元素作为参数CreateNode(strs_02[1]);//传递的是strs_02中的序号为1的数据,即:"strs[0]"这段文字}public void CreateNode(string strs){Nodes n = Instantiate(node, this.transform);//创建一个node预制体的实例,并将这个实例赋值给变量n//node:要实例化的预制体;this.transform:新实例将作为当前对象(脚本所挂载的物体)的子对象//调用Nodes.cs实例上的initData方法,并传递一个字符串数组的参数n.initData(strs); //n:node预制体实例;//n.initData();:调用预制体本身携带的公开的方法(在Nodes脚本中创建的方法)//括号内要写类型与接收方要求的相同的数据}
}
普通小白注释
public Nodes nodePrefab;//Nodes.cs中的node预制体void Start(){string[] strs = new string[3]; // 声明并初始化字符串数组strs[0] = "strs这个数组中的第一个数据序号为0";//赋值strs[1] = "测试序号1";strs[2] = "测试序号2";List<string> strs_02 = new List<string>(); // 声明并初始化List<string>strs_02.Add(strs[0]); // 添加数组的第一个元素到列表strs_02.Add("strs[0]"); // 添加字符串"strs[0]"到列表// 调用CreateNode方法,传递strs_02列表中的元素作为参数CreateNode(strs_02[0]); // 传递列表中的第一个元素CreateNode(strs_02[1]); // 传递列表中的第二个元素}public void CreateNode(string data){Nodes n = Instantiate(nodePrefab, this.transform); // 实例化Nodes预制体n.initData(data); // 调用initData方法,传递数据给节点进行初始化}
直接上手试版本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Test : MonoBehaviour
{public Nodes node;void Start(){string[] strs = new string[3]; strs[0] = "输出的是数组中的文字";strs[1] = "测试序号1";strs[2] = "测试序号2";List<string> strs_02 = new List<string>();strs_02.Add(strs[0]);strs_02.Add("输出的是Add.后面括号里面双引号里面的文字");CreateNode(strs_02[0]);CreateNode(strs_02[1]);}public void CreateNode(string data){Nodes n = Instantiate(node, this.transform);n.initData(data); }
}
4、利用Dictionary传递文本
Dictionary<int,string> strs3= new Dictionary<int,string>();//声明并初始化字典,名字是strs3
Dictionary
作用:加了索引的列表。给每个数据都取了个名字,方法查找、修改、调用数据
解释:
Dictionary:字典
<int,string>:int——键的类型(整数) string:值的类型——字符串
添加数据:
strs3.Add(1001, "文本内容");
调用
TransferTitleText(strs3[1001]);