找回密码
 立即注册
查看: 531|回复: 5

Unity两个脚本的函数如何互相调用?

[复制链接]
发表于 2021-12-22 11:46 | 显示全部楼层 |阅读模式
咋所有回答都得把a/b两者耦合了?
根据描述,这不是事件广播系统的典型应用场景么,
比如这样


几乎所有游戏里都会有这东西

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-12-22 11:53 | 显示全部楼层
咋所有回答都得把a/b两者耦合了?
根据描述,这不是事件广播系统的典型应用场景么,
比如这样


几乎所有游戏里都会有这东西

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-12-22 12:01 | 显示全部楼层
hi,看到这个问题会心一笑,想到了自己刚开始编程时班上大哥对我的指导。
我当时提出的问题是,我一个A如何去调用B
他的回答很有趣,你先得让A去认识B。我大悟,对哦,认都不认识,怎么调用。这种认识,我们在计算机领域,可能有n种叫法,但是本质都是认识。
回到你的问题,因为描述问题,请允许我重新描述下问题:
一个物体A脚本甲中间有一个函数Fa(OnMouseDown),一个物体B脚本乙中间有一个函数Fb(OnMouseDown),他们之间怎么沟通。解决问题的方式有很多种 我试着列一下:
1。函数Fa执行的时候直接告诉Fb,需要脚本甲中间有个public 脚本乙,然后你在Editor中手动拖过去
2。函数Fa执行的时候直接告诉Fb,需要脚本甲中间有个public 脚本乙,然后你在脚本甲初始化的时候把脚本乙找到
3。脚本乙开始运行的时候告诉脚本甲,你那边有消息了说一声(监听)
4。脚本甲和脚本乙彼此不知道,通过一个中间者来沟通

依据你的实际情况来吧。本质是你要让 AB认识
发表于 2021-12-22 12:05 | 显示全部楼层
从最直观得逻辑出发,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,甚至删除所有东西都行.
发表于 2021-12-22 12:11 | 显示全部楼层
可以
Public A a;
a.fun()
发表于 2021-12-22 12:20 | 显示全部楼层
我调用的时候一般是用 public static bool XXX
在b脚本中写http://GameObjectname.XXX就可以调用
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-23 00:31 , Processed in 0.093369 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表