首页 文章

创建同一预制件的2个单独实例

提问于
浏览
1

我正在尝试在下面创建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 回答

  • 0

    实际上,您确实有两个单独的 LockSystem 实例,并且每个实例都是 LockSystemScript 的单独实例 . 你犯了一个错误,但是在下面这行:

    if (Physics.Raycast(ray, out hit, 100) && hit.transform.gameObject.tag.Equals("Button") && _taps <= 3)
    

    如果 Raycast() 命中对象并且此对象是 Button ,则're doing here is you'重新检查 . 问题是你的场景中每个 MonoBehaviour 都会调用 Update() ,因此它会被 LockSystemScript 的两个实例调用,无论你正在查看什么 LockSystem ,你正在查看 Button ,上面的语句是 true .

    你应该做的是以下几点:

    if (Physics.Raycast(ray, out hit, 100) && hit.transform.gameObject.tag.Equals("Button") && _taps <= 3 && hit.transform.isChildOf(this.transform))
    

    这样你就可以检查你正在查看的_28302实际上是否属于现在运行 Update() 的脚本 .

相关问题