Unity解决脚本之间相互调用的几种方法

经常看到论坛里面有问,unity中脚本怎么调用另一个脚本,或者unity里面的有没有事件管理器等等,下面我们可以看看unity解决脚本相互调用的几种方法
1. 直接引用
最基本调用另一脚本的办法。通常项目中使用在一个预制体的内部,该模块完全由自己负责基本不对外耦合,操作方式简单在Inspector中拖拽即可。
[AppleScript]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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的基础,能有效的解决多对一调用需求
[AppleScript]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class Player : MonoBehaviour
{
     protected static Player instance;
     public static Player Instance
     {
         get
         {
             if ( null = = instance )
             {
                 instance = GameObject.FindObjectOfType < Player > ( ) ;
             }
             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:
[AppleScript]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
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 ) ;
}
}

优点:   
   低耦合,调用方便。
缺点:

  不言而喻基本没什么程序员爱用,效率较低,
  以字符串的形式调用不是类型安全的, 出错调试起来十分困难
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值