unity c# SendMessage

SendMessage

GameObject.SendMessage(“函数名”, 参数,SendMessageOptions);

参数

函数名:你所调用函数的名字(不能打错)
参数:在发送信息的时候可以添加参数发送过去,因为调用的函数有参数,所以你也要传参。当人,若调用函数无参,可直接省略。
SendMessageOptions:只要有两两点。

  • SendMessageOptions.RequireReceiver该模式是默认的,所以用SendMessage函数时可以只有一个函数名参数也可以。这个SendMessageOptions.RequireReceiver作用是当你调用的函数找不到的时候会报错,提醒你没有东西可以接收发的信息。
  • SendMessageOptions.DontRequireReceiver,该模式作用是允许没有接收信息的存在,不让代码报错。

作用

SendMessage是一个游戏物体的一个api,作用是发送信息从而调用你想调用的函数。主要是在别的脚本中调用另一个脚本中的方法。但是首先获得带有该方法脚本的物体。

例子:

创建场景
我创建的场景有些问题,在2d项目中创建两个3dCube。但是没什么问题,大家理解就好。
接下来分别为cube1和cube2添加脚本。
Cube1Send添加到Cube1,Cube2Get添加到Cube2;

Cube1Send代码如下:

public class cube1Send : MonoBehaviour
{
    
    
    private GameObject receiveCube;

    void Start()
    {
    
    
        receiveCube = GameObject.Find("Cube2");
    }
    void OnMouseDown()
    {
    
    
        if (this.gameObject)
        {
    
    
            string str = "Cube1被点击了";
            receiveCube.SendMessage("GetMessage",str);
        }
    }
}

Cube2Get代码如下:

public class Cube2Get : MonoBehaviour
{
    
    
    void GetMessage(string n)
    {
    
    
        Debug.Log("接收信息:" +n);
    }
}

运行Unity,当点击Cube1会发生:
Cube1被点击,触发发送信息
上述代码中只有获取到调用函数的Cube2才可以调用,这是首要条件。

若是不获取,直接用自身Cube1能不能发送信息调用GetMessage发放呢?

用自身调用的情况下
这是用自身调用来调用别的物体的脚方法:
提示没有接收者而报错
这样就会进行报错,不可这样来调试。

没有参数会怎么样?

发送信息有参数
接收函数无参数
发送信息传参,但是调用的函数无参会怎样?
在这里插入图片描述
这样也会报错,没有相应接收者,所以调用函数传不传参,传什么样的参数应该和调用函数参数一致。

SendMessageOptions

SendMessageOptions.DontRequireReceiver

SendMessage默认是SendMessageOptions.RequireReceiver,上述例子都是那个样子,所以就不用再阐述一二,因为当有问题的时候会直接给你报错。

当用SendMessageOptions.DontRequireReceiver时:
当用SendMessageOptions.DontRequireReceiver
依旧无参
Cube2Get的GetMessage依旧无参。
运行成功并调用
当点击Cube1时会发现依旧可以运行不报错,并且可以调用GetMessage函数。

当GetMessage函数参数是int类型时运行:
参数不一致
参数不一致但是会进行报错,说参数不匹配。
当GetMessage函数时重载:
重载
在这里插入图片描述
这样的话就会自动匹配相应的函数方法,不会调用int的GetMessage。

调用的访问级别

不知道大家有没有仔细发掘我调用的GetMessage函数访问权限。
我写的GetMessage都是 private权限的,而不是public,所以,SendMessage调用函数方法可以调用任意权限的函数方法!!

猜你喜欢

转载自blog.csdn.net/m0_48554728/article/details/115186170