我正在尝试在下面创建2个单独的键盘预制实例 . 问题是我点击哪一个并不重要,它们都响应并显示相同的输出 . 我的猜测是它们都引用了附加到预制件的相同脚本,我不知道如何创建同一脚本的2个单独实例 .
这里附有脚本:
using UnityEngine;
using UnityEngine.UI;
public class LockSystemScript : MonoBehaviour
{
public Text ScreenText;
private int _taps;
private Color _startColor;
private AudioSource _clickSound;
private RequestsManager _requestsManager;
private Vector3 _screenCenter;
private void Start ()
{
_taps = 0;
_startColor = ScreenText.color;
_clickSound = GetComponent<AudioSource>();
_requestsManager = RequestsManager.Instance;
_screenCenter = GetScreenCenter();
}
private void Update () {
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(_screenCenter);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100) && hit.transform.gameObject.tag.Equals("Button") && _taps <= 3)
{
ScreenText.text += hit.transform.name;
_clickSound.Play();
_taps++;
}
if (hit.transform.gameObject.tag.Equals("Submit"))
{
_clickSound.Play();
StartCoroutine(_requestsManager.InputCode(ScreenText.text, ScreenText));
}
if (hit.transform.gameObject.tag.Equals("Reset"))
{
_taps = 0;
ScreenText.color = _startColor;
ScreenText.text = "";
_clickSound.Play();
}
}
}
private Vector3 GetScreenCenter()
{
float screenX = Screen.width / 2;
float screenY = Screen.height / 2;
return new Vector3(screenX, screenY, 0);
}
}
1 回答
实际上,您确实有两个单独的
LockSystem
实例,并且每个实例都是LockSystemScript
的单独实例 . 你犯了一个错误,但是在下面这行:如果
Raycast()
命中对象并且此对象是Button
,则're doing here is you'重新检查 . 问题是你的场景中每个MonoBehaviour
都会调用Update()
,因此它会被LockSystemScript
的两个实例调用,无论你正在查看什么LockSystem
,你正在查看Button
,上面的语句是true
.你应该做的是以下几点:
这样你就可以检查你正在查看的_28302实际上是否属于现在运行
Update()
的脚本 .