搜档网
当前位置:搜档网 › 游戏开发之unity解决脚本相互调用的几种方法

游戏开发之unity解决脚本相互调用的几种方法

游戏开发之unity解决脚本相互调用的几种方法
游戏开发之unity解决脚本相互调用的几种方法

经常看到论坛里面有人问,unity中脚本怎么调用另一个脚本,或者unity里面的有没有事件管理器等等,本文17xuee游戏学堂就为大家介绍了游戏开发之unity解决脚本相互调用的几种方法。

1.直接引用

最基本调用另一脚本的办法。通常项目中使用在一个预制体的内部,该模块完全由自己负责基本不对外耦合,操作方式简单在Inspector中拖拽即可。

public class Window : MonoBehaviour

{

public Button button;

void Start()

{

Debug.Log("ClickButton");

button.Click();

}

}

public class Button : MonoBehaviour

{

public void Click()

{

Debug.Log("Clicked Me");

}

}

优点:

简单高效,编辑器中直接可见。

缺点:

脚本间强耦合、一个脚本的变化可能带来链式反应、也容易出现"Null ReferenceException"异常。

2. 单例模式

mvc的基础,能有效的解决多对一调用需求

public class Player : MonoBehaviour

{

protected static Player instance;

public static Player Instance

{

get

{

if (null == instance)

{

instance = GameObject.FindObjectOfType();

}

return instance;

}

}

void Awake()

{

if (null == instance)

instance = this;

if (this != instance)

{

Debug.LogError("singleton:" + this.ToString() + " exists, remove it"); GameObject.Destroy(this);

}

}

void OnDestroy()

{

instance = null;

}

public void Jump()

{

Debug.Log("I Jumped");

}

}

public class JumpButton : MonoBehaviour

{

public void OnClick()

{

Player.Instance.Jump();

}

}

优点:

mvc结构,逻辑结构清晰,有效解决了多对一的调用需求。

缺点:

要保证单例的构造比子模块的构造早,单例的生命周期要控制好,单例类后期会变得极其臃肿。

3. SendMessage,BroadCastMessage

unity4.6前的自带事件系统,基本解耦,以字符串的形式发送消息。ps:

public class Window : MonoBehaviour

{

public GameObject button;

void Start()

{

Debug.Log("ClickButton");

button.SendMessage("Click");

button.SendMessage("Click",this);

button.SendMessage("Click",this,SendMessageOptions.DontRequireReceiver);

}

}

优点:

低耦合,调用方便。

缺点:

不言而喻基本没什么程序员爱用,效率较低,以字符串的形式调用不是类型安全的,出错调试起来十分困难。

相关主题