参考文章如下:
https://blog.csdn.net/KingSea168/article/details/47326045 脚本交互
https://www.cnblogs.com/jeason1997/p/4818777.html 优雅地管理你的代码
https://blog.csdn.net/arbut/article/details/44203371 委托、事件、单例在Unity3D中的使用
1,静态函数,直接使用类调用。
BasicGrammar.Fun();
2,直接引用,创建Prefab,挂载脚本。
public BasicGrammar bg; 在面部中挂载有BasicGrammar脚本的Prefab。
优点: 简单高效,编辑器中直接可见。
缺点: 脚本间强耦合,一个脚本的变化可能带来链式反应,也容易出现"Null ReferenceException"异常
3,获取到对象,使用SendMessage。
GameObject.Find(gameObject.name).SendMessage("Fun3"); //能调用private类型函数
优点: 低耦合,调用方便。
缺点:不言而喻基本没什么程序员爱用,效率较低,以字符串的形式调用不是类型安全的,出错调试起来十分困难
4,获取到对象,直接调用函数。
GameObject.Find(gameObject.name).GetComponent<BasicGrammar>().Fun2();
5,使用delegate和event。
在B类中获得A类的对象,然后将B类的方法注册给A类的委托(A.delegateA = FunB)即可。
A类在需要的地方调用委托即可调用到B类的函数。//能调用private类型函数
6,使用单例模式。
BasicGrammar.Instance.Fun();
优点: 逻辑结构清晰,有效解决了多对一的调用需求
缺点: 要保证单例的构造比子模块的构造早,单例的生命周期要控制好,单例类后期会变得极其臃肿
思考:
使用1:A,B,C,DanLi类,4个类全部挂载。DanLi类初始化时拿到A,B,C,3个类的对象,A,B,C类之间的交互使用DanLi类里的A,B,C的对象。
使用2:A,B,C,DanLi类,4个类全部挂载。A,B,C,3个类初始化时将需要使用的类注册到DanLi类的事件里,然后A,B,C类之间的交互使用DanLi类里的事件。
7,使用观察者模式(或者是类似于观察者模式),完成消息之间的通信。