You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity按钮OnClick()事件列表不显示脚本自定义函数问题

问题原因

Unity UGUI系统中,Button组件Inspector面板里的OnClick持久化事件(也就是拖拽绑定的事件),仅支持识别绑定返回值为void的public实例方法。你当前编写的roll()方法返回值为int类型,不符合事件绑定的规则,因此不会出现在下拉选择列表中。

修复步骤
  • 调整目标方法的返回值类型为void。你本身的功能需求是触发掷骰子逻辑、修改按钮显示文本,不需要向事件系统返回数值,直接去掉返回值定义即可。
  • 补充按钮文本修改的逻辑,需要先引入Unity UI的对应命名空间,配置按钮组件引用,就能在方法内直接修改按钮显示的文字。
  • 确保脚本挂载在场景内处于激活状态的GameObject上,绑定事件时先将挂载脚本的对象拖入OnClick事件的对象选择槽,再点开下拉列表就能找到对应方法。

修改完成后的完整参考代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
// 如果使用TextMeshPro显示文本,需要额外引入以下命名空间
using TMPro;

public class DiceRollerBehavior : MonoBehaviour
{
    public int setRandom;
    // 在Inspector面板拖入需要控制的目标按钮
    public Button targetDiceButton;

    void Start()
    {
        setRandom = 0;
    }

    // public + void返回值,可被OnClick事件正常识别
    public void Roll()
    {
        setRandom = Random.Range(1, 10);
        Debug.Log("Your new number is:" + setRandom);
        // 修改按钮显示文本,根据你使用的文本组件二选一即可
        // 旧版UGUI Text用下面这行
        // targetDiceButton.GetComponentInChildren<Text>().text = setRandom.ToString();
        // TextMeshPro用下面这行
        targetDiceButton.GetComponentInChildren<TMP_Text>().text = setRandom.ToString();
    }
}

特殊场景说明

如果你确实需要保留方法的int返回值做其他逻辑处理,无法修改方法签名,那就不能用Inspector拖拽绑定的方式,需要在代码里动态注册事件监听,示例代码如下:

void Start()
{
    // 动态为按钮绑定点击事件
    targetDiceButton.onClick.AddListener(OnButtonClick);
}

private void OnButtonClick()
{
    // 调用带返回值的方法,接收结果自行处理
    int result = RollWithReturn();
    Debug.Log("动态调用拿到的掷骰结果:" + result);
}

public int RollWithReturn()
{
    setRandom = Random.Range(1, 10);
    Debug.Log("Your new number is:" + setRandom);
    return setRandom;
}

内容的提问来源于stack exchange,提问作者ron252

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:21:22