在两个脚本之间传输文本信息

说明:实例是先做的,总纲是学习后总结并完善的

一、总纲

(一)要素

发送方:
1.传递文本时,在发送方需要声明一个变量。

(1) 如果在接收方有一个现有文本,发送方声明的变量

复制代码
public Recipients titleText;//接收方脚本中的,用来接收传递文本信息的变量

Recipients :接收方脚本的名称

titleText:接收方脚本中设置的,用于接收信息的文本

(2) 如果在接收方需要实例化文本,发送方声明的变量

复制代码
  public Recipients recipientsPrefab; // 引用Recipients类型的预制体(需要在Unity赋值)  
  private Recipients recipientsInstance; // 用于存储Recipients的实例引用(在Start方法中实例化的时候赋值)
2.发送方还需要有一个方法用于传递信息(这个方法实质上起到了中转的作用)。

(1) 如果在接收方有一个现有文本,发送方的TransferTitleText方法

复制代码
    public void TransferTitleText(string transmission)//定义一个公开的方法,它接收一个字符串类的参数(transmission)
    {
        titleText.initData(transmission);//调用 titleText 对象的 initData 方法,并传递了 transmission 字符串作为参数
                                         //可替换这两句:Recipients t = titleText; t.initData(transmission);        
    }

A. TransferTitleText(string transmission)

TransferTitleText:方法的名称(传输标题文本------中转标题文本更好?)。

可根据需要自主命名。SetTitleText(设置标题文本)更合适?

string:参数类型。表示调用这个方法时在()内要写string类的参数

transmission:是参数的名字(可按需自主命名),它只是一个占位符。

可接收任何传入的字符串(你把它变成什么,它就是什么)如下例

**TransferTitleText(string transmission)**方法被调用时,可以输入string类型的参数。如

复制代码
TransferTitleText(str);//str:string类型的参数

再如

复制代码
//方法:
public void initData(string titleText)
{
    TitleText.text = titleText;
}

//调用
titleText.initData(transmission);

B. titleText.initData.(transmission);

titleText.initData:调用 titleText 对象的 initData 方法

titleText:接收方脚本中的文本,接收由transmission传递来的字符串

initData:接收方脚本中的方法,在发送方脚本中调用。在两个脚本之间传递 ()中的内容

transmission:用来初始化titleText文本的文本内容。并将接收到的字符串传递给titleText

初始化:把titleText文本中的原有内容替换成transmission接收到的内容

(2) 如果在接收方需要实例化文本,发送方的StartTransferTitleText方法

Start方法中实例化文本预制体

复制代码
  void Start()
    {
        //实例化预制体
        recipientsInstance = Instantiate(recipientsPrefab, this.transform);
    }

recipientsInstance:用于存储实例化出来的预制体。在步骤1.中已经声明

TransferTitleText方法中传输文本

复制代码
public void TransferTitleText(string transmission)
    {
        // 如果recipientsInstance尚未实例化,则创建一个新实例(正常情况下在Start方法中已经创建了)
        if (recipientsInstance == null)
        {
            recipientsInstance = Instantiate(recipientsPrefab, this.transform);
        }
        // 设置recipientsInstance的文本内容
        recipientsInstance.initData(transmission);
    }
3.发送方还需要有一个Start方法,以调用传递方法并设定传递数值

(1) 直接在方法中设定传递数值:

复制代码
    void Start()
    {
         TransferTitleText("直接传输");       
    }

效果图

(2) 通过字符串设定传递数值:

复制代码
    void Start()
    {
        string str = "通过变量"str"传输";
        TransferTitleText(str);
    }

效果图

4.将发送方的脚本挂载在场景中的常驻物体上
5.赋值
接收方:
1.传递文本时,接收方需要有一个文本或者一个文本预制体,以承载接收的文本信息
复制代码
public TextMeshProUGUI TitleText;//在Unity中赋值一个文本(用于接收文本信息)
2.接收方还需要有一个用于接收信息的方法,挂载在步骤1的文本或预制体上
复制代码
    public void initData(string titleText)//接收的文本命名为titleText
    {
        TitleText.text = titleText;//在TitleText.text文本中显示接收到的文本内容
    }

initData:方法名。可以根据需要命名,但,需要与发送方调用的方法名一致。

(string titleText):在本脚本(接收方)声明的一个局部变量,用来存储传递过来的文本信息

TitleText.text = titleTexttitleText上存储的文本信息在TitleText上显示出来

3.把接收方脚本挂载在文本或预制体上
4.赋值
关于赋值:
1、将接收方的脚本挂载到含有文本的物体上

(1) 根据需要可以挂在预制体上后实例化------接收方场景中无接收文本

(2) 也可以直接挂载到场景本来就存在的物体上------接收方场景中有一个接收文本

2、将发送方的脚本挂载到场景中的常驻物体上

(二)文本信息传递路线

以向场景中的文本中传输信息为例

目的 :使 "通过变量"str"传输 "这段文字在场景中的 **Text (TMP)**上显现出来

传递路线

从发送方(Sender.cs)开始:

  1. Start方法中用 str 装载 "通过变量"str"传输 "这段文字
  1. 调用**TransferTitleText();** 方法,并将 **str**作为参数传递给这个方法。
  1. 后面的直接上图吧------这是发送方脚本路线

到接收方(Recipients.cs)结束:

二、实例

(一)实例1------接收方有一个文本,用于显示接收的信息

接收方:

1、UI-Text TextMeshPro,名字自取。如:TitleText

2、给TitleText添加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
    {
        TitleText.text = titleText;//在TitleText.text文本中显示接收到的文本内容
    }
}

3、回到Unity,赋值

发送方:

1、给Canvas添加sender.cs组件

复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sender : MonoBehaviour
{
    public Recipients titleText;
    void Start()
    {
       if (titleText == null)
        {
            titleText = new Recipients();
        }
        CreateTitleText();
    }

    public void CreateTitleText()
    {
        Recipients t = titleText;
        t.initData("传递方"); 
    }
}

2、回到Unity,赋值

(二)实例2------在接收方实例化一个文本,文本中显示接收的信息

接收方:
1、UI-Text TextMeshPro,名字自取。如Text (TMP)
2、为Text (TMP)添加Recipients.cs
复制代码
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class Recipients : MonoBehaviour
{
    public TextMeshProUGUI TitleText;

    public void initData(string titleText)//初始化节点的数据(类型是String;名字是titleText)
                                          //把接收到的文本命名为titleText
                                          //初始化节点的数据,接收一个字符串类型的参数titleText作为标题文本
    {
        //使用接收到的文本titleText更新TitleText文本组件的内容
        TitleText.text = titleText;//将TitleText文本组件的内容设置为接收到的titleText(在TitleText.text文本中显示接收到的文本内容)
    }

}
3、回到Unity赋值
4、将Text (TMP)制成预制体,删除Hierarchy面板上的Text (TMP)
发送方:
1、给Canvas添加 Sender.cs组件
2、打开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 update
    void Start()
    {
        CreateTitleText();
    }

    public void CreateTitleText()
    {
        Recipients t = Instantiate(titleText, this.transform);//创建一个titleText预制体的实例,并将这个实例赋值给变量t
                                                              //titleText:要实例化的预制体;this.transform:新实例将作为当前对象(脚本所挂载的物体)的子对象
                                                              //调用Recipients.cs实例上的initData方法,并传递一个字符串参数
        t.initData("传递方"); //t:titleText预制体实例;
                           //t.initData();:调用预制体本身携带的公开的方法(在Recipients脚本中创建的方法)
                           //括号内要写类型与接收方要求的相同的数据
    }
}
3、回到Unity,赋值
相关推荐
牙膏上的小苏打233314 小时前
Unity Surround开关后导致获取主显示器分辨率错误
unity·主屏幕
Unity大海16 小时前
诠视科技Unity SDK开发环境配置、项目设置、apk打包。
科技·unity·游戏引擎
浅陌sss21 小时前
Unity中 粒子系统使用整理(一)
unity·游戏引擎
维度攻城狮1 天前
实现在Unity3D中仿真汽车,而且还能使用ros2控制
python·unity·docker·汽车·ros2·rviz2
为你写首诗ge1 天前
【Unity网络编程知识】FTP学习
网络·unity
神码编程1 天前
【Unity】 HTFramework框架(六十四)SaveDataRuntime运行时保存组件参数、预制体
unity·编辑器·游戏引擎
菲fay1 天前
Unity 单例模式写法
unity·单例模式
火一线1 天前
【Framework-Client系列】UIGenerate介绍
游戏·unity
ZKY_241 天前
【工具】Json在线解析工具
unity·json
ZKY_242 天前
【Unity】处理文字显示不全的问题
unity·游戏引擎