Unity两个脚本的函数如何互相调用?
咋所有回答都得把a/b两者耦合了?根据描述,这不是事件广播系统的典型应用场景么,
比如这样
几乎所有游戏里都会有这东西 咋所有回答都得把a/b两者耦合了?
根据描述,这不是事件广播系统的典型应用场景么,
比如这样
几乎所有游戏里都会有这东西 hi,看到这个问题会心一笑,想到了自己刚开始编程时班上大哥对我的指导。
我当时提出的问题是,我一个A如何去调用B
他的回答很有趣,你先得让A去认识B。我大悟,对哦,认都不认识,怎么调用。这种认识,我们在计算机领域,可能有n种叫法,但是本质都是认识。
回到你的问题,因为描述问题,请允许我重新描述下问题:
一个物体A脚本甲中间有一个函数Fa(OnMouseDown),一个物体B脚本乙中间有一个函数Fb(OnMouseDown),他们之间怎么沟通。解决问题的方式有很多种 我试着列一下:
1。函数Fa执行的时候直接告诉Fb,需要脚本甲中间有个public 脚本乙,然后你在Editor中手动拖过去
2。函数Fa执行的时候直接告诉Fb,需要脚本甲中间有个public 脚本乙,然后你在脚本甲初始化的时候把脚本乙找到
3。脚本乙开始运行的时候告诉脚本甲,你那边有消息了说一声(监听)
4。脚本甲和脚本乙彼此不知道,通过一个中间者来沟通
依据你的实际情况来吧。本质是你要让 AB认识 从最直观得逻辑出发,A触发点击时会自动调用A的OnMouseDown,这时候如果B想知道,那肯定需要在A的OnMouseDown里调用B的函数来通知B A被点击了,无论B里的这个函数叫啥名字.
调用MonoBehaviour里的函数需要首先知道GameObject,也就是首先需要知道B的脚本到底挂在哪个物体下,所以无论用什么方法,GameObject.Find也好,Transform.GetChild也好,都行,总之你找到B的GameObject就行,然后再GetComponent获取B的脚本.然后你就可以调用你想调的函数了.
从架构更好的逻辑上出发.当A被点击触发OnMouseDown时,应该只是通知核心逻辑自己被点击了,而被点击了会发生什么事情A并不会关心,由核心逻辑来决定具体执行什么.为什么要这么设计呢.A被点击只是触发一些事件,但是这些事件只能由A被点击这个操作触发吗?一般来说一个事件可能被多个操作触发.所以在具体触发的地方并不需要写到底该怎么办,否则每一个触发的地方都要写一遍.A被点击触发核心的一个逻辑,在这个逻辑里你干什么都行,通知B,删掉B,甚至删除所有东西都行. 可以
Public A a;
a.fun() 我调用的时候一般是用 public static bool XXX
在b脚本中写http://GameObjectname.XXX就可以调用
页:
[1]