c# - 单击()上的 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;
}
解决方案
检查器只允许您分配接受零个或一个参数的回调函数,并且参数只有几种允许的类型(bool、int、float 和 GameObject)。但是,您可以在代码中将该函数添加为按钮 onClick 侦听器,而不是从检查器中添加此函数,如下所示:
void Start()
{
LockPick1.onClick.AddListener(() => {
int[] lockPick1 = GetLockPick1Values();
int[] lockPick2 = GetLockPick2Values();
int[] lockPick3 = GetLockPick3Values();
LockPickTrigger(lockPick1, lockPick2, lockPick3);
});
}
推荐阅读
- flutter - 如何在颤动中呈现一个空视图?
- java - 如何修复在java中读取文件
- reactjs - 如何在 npmjs.com 中获取包的 url 而不是使用 npm 安装
- node.js - Mongoose - 如何在键中使用变量
- mysql - 未正确加入
- php - 带有变量的 MySQL UNIX_TIMESTAMP?
- python - 关于何时停止训练 resnet50 网络的建议(aws 上的 mxnet)
- java - 在 Java Swing 中扩展 JLabel 以使用给定的字体(扩展类中的超级用法)
- unity3d - ExpressionEvaluator.Evaluate when unity build apk
- c++ - 如何使用 c++ ncurses 修复打开终端错误