微信登录

C# - 广播接收 - Message

作用:传递信息

方式 — 3种broadcastMessage,sendMessage,sendMessageUpwards

broadcastMessage 可以向该脚本所挂物体和该物体的子物体(子物体的子物体……)发送另一脚本的指定方法(只有该物体和其子物体上有另一脚本);
sendMessage 同一对象的不同脚本间互通消息,即使是私有方法也可以;name就是可以传递的参数
sendmessageUpwards 可以向该脚本所挂物体和该物体的父物体(父物体的父物体……)发送另一脚本的指定方法(只要该物体和其父物体上有另一脚本)

参数 — 3个

参数:(“方法名”,传递的信息,传递的方式)
参数:(“method”,name,SendMessageOptions.RequireReceiver);
传递的方式:
SendMessageOptions.RequireReceiver需要接受者,就是说方法method1必须要存在,不然就会报错;
SendMessageOptions.DontRequireReceiver不需要接收者。方法不存在也不报错

广播代码:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class testTwo : MonoBehaviour {
  5. string name = "king";
  6. // Use this for initialization
  7. void Start ()
  8. {
  9. // transform.SendMessage("method",name,SendMessageOptions.RequireReceiver);
  10. transform.BroadcastMessage("method",name,SendMessageOptions.DontRequireReceiver);
  11. transform.SendMessageUpwards("method",name,SendMessageOptions.DontRequireReceiver);
  12. transform.SendMessage("method2",name,SendMessageOptions.DontRequireReceiver);
  13. //在检测射线碰撞时也可以使用此方法,调用与射线碰撞的游戏物体身上的某一脚本的指定方法
  14. //hit.collider.SendMessage("method",SendMessageOptions.DontRequireReceiver);
  15. }
  16. void method(string a)
  17. {
  18. print(a);
  19. }

接收代码

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class testThree : MonoBehaviour {
  5. private void method() //不同脚本之间调用,sendmessage() 私有方法也可以被调用
  6. {
  7. print(21);
  8. }
  9. }
C# - 广播接收 - Message