Unity委托踩坑实例

直接上代码

 Button btn;
    string test = "ta他啊";
    int temp = 99;
    private void Awake()
    {
        btn = transform.GetComponent<Button>();

    }
    private void Start()
    {
        
        btn.onClick.AddListener(delegate { Debug.Log("string值:"+test+"int值:"+temp); });

        StartCoroutine(Test());
    }
    IEnumerator Test()
    {
        yield return new WaitForSeconds(5f);
        test = "她";
        temp = 1024;
    }

结果

string值:ta他啊int值:99

string值:她int值:1024

结论

委托是封装一个方法,这个方法里面所有的变量其实都是传的地址,而不是值,这也就说明了为什么当你去循环注册button时会出现数组越界

比如一个for循环 i<5, 意思就是i=5的时候跳出循环

你的i传到委托里,其实传地址进去而不是一个值,当循环结束,i的值也就变成了5,点击事件当然会出现数组越界的错误。有些人循环注册事件老是最后一个值也是这个原因

解决方法就是直接再声明一个变量int temp=i,把temp传进委托里,因为temp仅仅是保留了i的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值