200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Unity3D 调用其他脚本函数方法

Unity3D 调用其他脚本函数方法

时间:2020-07-09 03:14:27

相关推荐

Unity3D 调用其他脚本函数方法

在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

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

区别

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。