Unity_使用反射实现一个SendMessageUpwards

本文探讨了如何在Unity中通过反射技术扩展Invoke方法,实现SendMessageUpwards的功能。作者分享了相关代码,并指出在实际运用中遇到的Ctor错误以及在特定脚本中使用gameobject.name和transform.name等问题。
摘要由CSDN通过智能技术生成

关于Invoke的一些方法可以看我上篇博客-->>使用反射完成一个Invoke(其实我感觉应该是SendMessage)

https://blog.csdn.net/MikuLingSSS/article/details/83422814

============================================代码================================================

       因为就是那上篇的代码进行的扩展,所以这些代码会连着上篇的代码,

using UnityEngine;
using System;
using System.Collections.Generic;
using System.Reflection;

//SendMessageUpward<-OR->BroadcastMessage使用多线程,先在主线程中找到所有本级物体以及父级物体上面的所有Mono组件,压入一个parent列表
//之后新建一个线程,在里面进行递归,如果找到方法就把我们找到的数据暂时的压进一个dict<className,list<methodName>>中,在parent为空的时候,我们就可以遍历这个dict来进行数据的操作
//感觉这个想法可行
//(上面这段话是我上篇博客最后留下的,但是实现没有用到线程,因为我测试了一下代码的延迟,发现根本没有用到线程的必要,所以pass(其实还是因为有几个难点懒得去思考 = = ,比如join,比如并发查询,执行))

public static class InvokeExtension
{
    #region SendMessageUpward
    /// <summary>
    /// 查找到所有的继承了Mono的自身以及父级物体组建
    /// </summary>
    /// <param name="transform"></param>
    /// <param 需要反射的方法名="method_name"></param>
    /// <param 参数和参数类型的列表="obj"></param>
    /// <returns></returns>
    public static object SelfInvokeUpward(this Transform transform, string method_name, params object[] obj)
    {
        List<Type> class_name_list = new List<Type>();
        Transform trans = transform;
        Type[] type_list = new Type[obj.Length / 2];
        object[] obj_list = new object[obj.Length / 2];
        for (int i = 0; i < obj.Length; i++)
        {
            if (i % 2 == 0)
            {
                type_list[i / 2] = (Type)obj[i];
                continue;
            }
            ob
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值