首页 > 解决方案 > 单击()上的 Unity 按钮。公共无效方法()与公共无效方法(arr1 [],arr2 [],arr3 [])

问题描述

我是 Unity 和编程的新手。当我尝试在单击时启动 method() 按钮时(见图),

在此处输入图像描述

由于某种原因,我无法启动 public void LockPickTrigger(int[] lockPick1, int[] lockPick2, int[] lockPick3),但 public void LockPickTrigger() 工作得很好。如何启动第一种方法?这是代码:(向下滚动到“这里开始代码”)

  using UnityEngine;
  using UnityEngine.UI;

public class GameController : MonoBehaviour
{
[SerializeField] private Button LockPick1;
[SerializeField] private Button LockPick2;
[SerializeField] private Button LockPick3;

[SerializeField]
private Text LockPickText1;
[SerializeField]
private Text LockPickText2;
[SerializeField]
private Text LockPickText3;

[SerializeField]
private GameObject LockBullet;
[SerializeField]
private GameObject LockBullet1;
[SerializeField]
private GameObject LockBullet2;
[SerializeField]
private GameObject LockBullet3;
[SerializeField]
private GameObject LockBullet4;

// Start is called before the first frame update
void Start()
{
    //Unimportant, scroll down
    int a = Random.Range(-2, 2);
    int c = Random.Range(-2, 2);
    int e = Random.Range(-2, 2);
    int g = Random.Range(-2, 2);
    int h = Random.Range(-2, 2);

    int[] lockPick1 = new int[] { a, c, e, g, h };
    int[] lockPick2 = new int[] { e, c, a, h, g };
    int[] lockPick3 = new int[] { h, g, e, c, a };

    LockPickText1.text = "a = " + lockPick1[0].ToString() + " c = " + lockPick1[1].ToString() + " e = " + lockPick1[2].ToString() + "\n" + " g = " + lockPick1[3].ToString() + " h = " + lockPick1[4].ToString();
    LockPickText2.text = "a = " + lockPick2[0].ToString() + " c = " + lockPick2[1].ToString() + " e = " + lockPick2[2].ToString() + "\n" + " g = " + lockPick2[3].ToString() + " h = " + lockPick2[4].ToString();
    LockPickText3.text = "a = " + lockPick3[0].ToString() + " c = " + lockPick3[1].ToString() + " e = " + lockPick3[2].ToString() + "\n" + " g = " + lockPick3[3].ToString() + " h = " + lockPick3[4].ToString();

    //Here starts the code
    LockPickTrigger(lockPick1, lockPick2, lockPick3);
}

public void LockPickTrigger()
{

}

public void LockPickTrigger(int[] lockPick1, int[] lockPick2, int[] lockPick3)
{
    Vector3 Bullet = new Vector3(lockPick1[0], lockPick1[0], 0);
    LockBullet.transform.position = LockBullet.transform.position + Bullet;
}

标签: c#unity3d

解决方案


检查器只允许您分配接受零个或一个参数的回调函数,并且参数只有几种允许的类型(bool、int、float 和 GameObject)。但是,您可以在代码中将该函数添加为按钮 onClick 侦听器,而不是从检查器中添加此函数,如下所示:

void Start()
{
    LockPick1.onClick.AddListener(() => {
        int[] lockPick1 = GetLockPick1Values();
        int[] lockPick2 = GetLockPick2Values();
        int[] lockPick3 = GetLockPick3Values();
        LockPickTrigger(lockPick1, lockPick2, lockPick3);
    });
}

推荐阅读