一、需求目标
- 开发 Unity3D 项目时,经常需要在脚本 A 中调用其他脚本 B 当中已经定义的函数或者变量
二、解决方案
1.创建两个空的游戏对象和两个脚本文件
创建两个空的游戏对象,分别为 GameObject_ScriptA , GameObject_ScriptB
创建两个 C# 脚本文件, 分别为 ScriptA , ScriptB
2.编写脚本
- 我们需要实现的目标是在 ScriptA 调用 ScriptB 中定义的变量和函数
- 所以需要先在 ScriptB 当中声明 public 函数和 public 变量
- 这里采用的演示实例为:
- public void DoSomething() 函数,作用为在 Console 控制台上显示:Here is script B;
- public string ScriptB_String = “Hello World!” 字符串;
- 再在 ScriptA 中声明一个 ScriptB 类的实例对象 UsingScriptB
- 之后先在 ScriptA 中写好需要调用的 ScriptB 中的函数和变量
ScriptB 代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScriptB : MonoBehaviour
{
// 声明一个 public 的字符串 ScriptB_String, 内容为 Hello World!;
public string ScriptB_String = "Hello World!";
// 声明一个 public 的函数 DoSomething, 作用为在 Console 控制台上显示:Here is script B;
public void DoSomething()
{
Debug.Log("Here is script B");
}
}
ScriptA 代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScriptA : MonoBehaviour
{
// 声明一个 ScriptB 类的实例对象 UsingScriptB
public ScriptB UsingScriptB;
// Update is called once per frame
void Update()
{
// 调用脚本 ScriptB 中的 DoSomething 函数
UsingScriptB.DoSomething();
// 显示脚本 ScriptB 中的 ScriptB_String 字符串变量
Debug.Log("ScriptB_String: " + UsingScriptB.ScriptB_String);
Debug.Log("************************************");
}
}
3.脚本链接对象
- 分别将我们的 ScriptA 和 ScriptB 分别链接(直接按住脚本文件拖到游戏对象身上)到我们之前创建的游戏对象 GameObject_ScriptA 和 GameObject_ScriptB 上
- 在 GameObject_ScriptA 上我们需要将已经链接有ScriptB 脚本的 GameObject_ScriptB 链接到我们的 UsingScriptB 对象上
三、测试结果
- 运行工程我们就可以在 Console 面板上看到打印出来的日志信息了,这里的函数调用和变量打印都是在 ScriptA 中的
Update() 函数中调用的,而函数和变量的本体是在 ScriptB 中定义和声明的 - 从而完美地实现了我们在 脚本A 调用其他 脚本B 中定义的函数和变量
- 当然,这只是一个案例演示,大家可以通过这种方法轻松自如地在 Unity 项目中不同的脚本之间调用各种其他脚本中你想要的函数、变量等…
- 这样不仅仅可以增加脚本之间的互通性,也可以节省很多不必要重复定义