我来自网络开发人员,最近开始学习 Unity。我正在尝试映射游戏对象的二维数组并检测特定元素上的鼠标单击,返回其索引。
我正在努力统一复制一个“array.map”函数,我可以在其中攻击每个元素的“点击”。我正在寻找类似的东西:
for (int i = 0; i < Column; i++)
{
for (int j = 0; j < Row; j++)
{
void onClickDetected()
{
Debug.Log(i + j);
}
}
}
任何帮助在这里将不胜感激!
我假设你有一堆非 UIGameObject
类型的元素,你希望在这些元素上有一个可用的事件,这样你就可以监听对它们执行的鼠标点击。
一种解决方案是制作一个单独的脚本,其中包含一个使用 C#委托制作的事件,该委托将由OnMouseDown
. 您需要将此脚本附加到每个可点击元素。然后,包含可点击元素数组的脚本会将方法附加到每个实例的事件。
using System;
using UnityEngine;
public class ClickableObject : MonoBehaviour
{
public event Action<ClickableObject> MouseDown;
// A collider component is required for OnMouseDown to work
private void OnMouseDown()
{
MouseDown?.Invoke(this);
}
}
using UnityEngine;
public class TestScript : MonoBehaviour
{
[SerializeField]
private ClickableObject[] clickableObjects = new ClickableObject[0];
private void Start()
{
foreach (ClickableObject unit in clickableObjects)
unit.MouseDown += OnClickableObjectMouseDown;
}
private void OnClickableObjectMouseDown(ClickableObject unit)
{
Debug.Log($"{unit.name} clicked!");
}
private void OnDestroy()
{
foreach (ClickableObject unit in clickableObjects)
unit.MouseDown -= OnClickableObjectMouseDown;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句