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

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

一、总纲

(一)要素

发送方:
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,赋值
相关推荐
逐·風3 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
_oP_i4 小时前
Unity Addressables 系统处理 WebGL 打包本地资源的一种高效方式
unity·游戏引擎·webgl
Leoysq13 小时前
【UGUI】实现点击注册按钮跳转游戏场景
游戏·unity·游戏引擎·ugui
_oP_i17 小时前
unity中 骨骼、纹理和材质关系
unity·游戏引擎·材质
Padid1 天前
Unity SRP学习笔记(二)
笔记·学习·unity·游戏引擎·图形渲染·着色器
Tp_jh1 天前
推荐一款非常好用的C/C++在线编译器
linux·c语言·c++·ide·单片机·unity·云原生
dangoxiba2 天前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十八集补充:制作空洞骑士独有的EventSystem和InputModule
游戏·unity·c#·游戏引擎·playmaker
无敌最俊朗@2 天前
unity3d————屏幕坐标,GUI坐标,世界坐标的基础注意点
开发语言·学习·unity·c#·游戏引擎
_oP_i2 天前
Unity 中使用 WebGL 构建并运行时使用的图片必须使用web服务器上的
前端·unity·webgl
司军礼2 天前
Unity自动打包——Shell交互
unity·游戏引擎·交互