在Unity中,我们经常需要在某个脚本中调用另外一个脚本中的函数,这时候问题就来了,我们该怎么让一个脚本中的函数被其他脚本访问到呢?其实有很多种方法,在这里记录一下,防止以后忘记。


(一)、被调用脚本函数为static类型,调用时直接用  类名.函数名()

对于静态的公有函数或变量,是可以在别的类中直接使用类名.函数名类名.变量名调用的,通常在GameManager或SoundManager这种整个游戏中都可能会调用到其中函数的脚本会这样使用。

① 静态公有函数,使用类名.函数名()直接调用。例如:

public class GameManager : MonoBehaviour {public static void HaHaHa(){}
}// 在其他脚本中调用HaHaHa()函数
GameManager.HaHaHa();

② 单例模式,通过静态变量调用类中的公有函数,变量声明为static,函数不需要再声明为static。例如:

public class SoundManager : MonoBehaviour
{private static SoundManager _instance;public static SoundManager Instance { get { return _instance; } }private void Awake(){_instance = this;}public void HaHaHa(){}
}// 在其他脚本中调用HaHaHa()函数
SoundManager.Instance.HaHaHa();

(二)、通过获取需要调用脚本所挂载在的游戏对象,再从该游戏对象上获取脚本并调用其中函数

        先通过GameObject.Find("脚本所挂载在的物体的名字")找到游戏对象,再通过GetComponent<脚本名>().函数名()调用脚本中的函数,只能调用public类型函数。例如:

Enemy .cs脚本挂载在游戏对象“Enemy_1”上,需要在别的脚本中调用其中的TakeDamage()函数。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Enemy : MonoBehaviour
{public void TakeDamage(){}
}// 在其他脚本中调用TakeDamage()函数
GameObject.Find("Enemy_1").GetComponent<Enemy>().TakeDamage();

(三)、通过获取需要调用脚本所挂载在的游戏对象,再通过发送消息调用其中函数

        先通过GameObject.Find("脚本所挂载在的物体的名字")找到游戏对象,再通过SendMessage("函数名")调用脚本中的函数,可以调用public和private类型函数。例如:

Enemy .cs脚本挂载在游戏对象“Enemy_1”上,需要在别的脚本中调用其中的TakeDamage()函数。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Enemy : MonoBehaviour
{private void TakeDamage(){}
}// 在其他脚本中调用TakeDamage()函数
GameObject.Find("Enemy_1").SendMessage("TakeDamage", SendMessageOptions.DontRequireReceiver);

除了SendMessage,还有SendMessageUpwards和BroadcastMessage函数,三个函数的参数相似,都是方法名+方法的参数+额外信息选项组成。

SendMessageOptions

  1. SendMessageOptions.RequireReceiver //如果没有找到相应函数,会报错(默认是这个状态)
  2. SendMessageOptions.DontRequireReceiver //即使没有找到相应函数,也不会报错,自动忽略

区别

  1. SendMessage仅向指定对象的所有脚本推送消息
  2. SendMessageUpwards向指定对象和它的所有父物体推送消息
  3. BroadcastMessage向指定对象和它的所有子物体推送消息

Unity3D 调用其他脚本函数方法相关推荐

  1. 在c#中调用windows脚本的方法

    在c#中调用windows脚本的方法 方法1:直接调用   CODE:   System.Diagnostics.Process proc = new System.Diagnostics.Proce ...

  2. C++调用Python脚本函数

    C++调用Python脚本函数 文章目录 C++调用Python脚本函数 1.编写python脚本,并下载安装所需的库文件(保证编写的python脚本在指定的虚拟环境下可以正常运行) 2.在Vs201 ...

  3. python调用脚本_3种python调用其他脚本的方法

    1.用python调用python脚本 #!/usr/local/bin/python3.7 import time import os count = 0 str = ('python b.py') ...

  4. Java调用R脚本的方法总结

    0 前言 R是一种非常方便易用的绘图.统计分析.ML算法设计方面的脚本语言.实际中有这样一种场景:算法工程师用R搭建了机器学习算法模型,想用于javaweb之中但是又不想重新用java写一遍算法模型, ...

  5. 3种python调用其他脚本的方法,你还知道其他的方法吗?

    1.用python调用python脚本 #!/usr/local/bin/python3.7 import time import oscount = 0 str = ('python b.py') ...

  6. Jython-在JAVA调用Python脚本使用方法详解+示例代码

    目录 前言 一.Jython简介 1.场景 2.下载 二.运用示例 构建Maven项目 构建java,运行python语句: 运行python脚本: 运行带有第三方库的Python脚本 转为jar包 ...

  7. c#调用js脚本报错_C#后台调用前台JS函数方法

    总结了公司其他人的一些C#后台调用前台的方法: 方法一: 假设前台页面的JS脚本标签中有如下函数: function A() { alert("hello word!"); } 那 ...

  8. c#调用python函数_C#调用python脚本的方法步骤(2种)

    因项目需要,需要使用C#控制台程序执行python脚本,查询各种资料后可以成功调用了,记录一下,以备后面遗忘. 只尝试了两种调用方式,第一种只适用于python脚本中不包含第三方模块的情况,第二种针对 ...

  9. 调用其他脚本上方法的方法

    1.使用静态变量 2.在Class下面public 目标脚本的名字 自定义名字,在inspect里赋值,在方法中用"自定义名字.目标脚本的方法名"来调用 3.在class下面pub ...

最新文章

  1. Subsonic 基本使用
  2. read(10, quot;NTP0 13690\nquot;, 64) 数据库登录缓慢
  3. 十、开始进入PowerBI的世界
  4. 【css】我的 css 框架——base.css
  5. Java 分割、合并byte数组
  6. ECMAScript 6 -- let和const命令
  7. java对象和json对象之间互相转换
  8. 给文件夹中的文件批量更改名称
  9. 【报告分享】2021年度中国计算机视觉人才调研报告-德勤.pdf(附下载链接)
  10. 兼容多种模块规范(AMD,CMD,Node)的代码
  11. ROS的学习(十九)用rosserial创建一个subscriber
  12. conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’解决
  13. 2022年的1024程序员节有啥好玩的小游戏推荐?
  14. c# EASYUI+MVC filebox示例
  15. 俩人同样写代码,我拿七千他咋五万八...
  16. 求助交通仿真 Netlogo软件
  17. 支持流畅运行win10的最低配置是什么
  18. ORA-01109:数据库未打开 解决办法
  19. revit二次开发2016
  20. 光流法——Opencv

热门文章

  1. 开发提高工作效率的开发工具和办公软件
  2. 计算机组成原理(第三版)唐朔飞-第五章输入输出系统-课后习题
  3. 全国计算机等级考试模拟考卷 二级C语言程序设计pdf
  4. 安卓玩机搞机技巧综合资源-----“另类更新“偷渡”操作步骤 无需解锁bl 无需内侧用户【十三】
  5. ubuntu 解决自动休眠问题
  6. 使用立体声混音(Stereo Mix)录制音频的补充
  7. ESP8266开发之旅 网络篇⑲ WebSocket Server——全双工通信
  8. 如何更改excel直线拟合有效数字的位数
  9. 出口欧盟万圣节cosplay服装CE认证办理标准
  10. 网上书店平台---需求规格说明书