为什么Update()会多次调用自己

本文关键字:调用 自己 Update 为什么 | 更新日期: 2023-09-27 18:20:16

我是Unity的新手,正在开发一款板球游戏。我有一个显示球队选择的屏幕。它显示了15名球员的照片,我必须从中选择任何11名。

我一直在列表中添加被点击(选中)的玩家。但问题是,当我点击一次玩家时,我的列表大小有时会变成4、5甚至更多。我的脚本如下:

using UnityEngine;
using System.Collections;
public class bear : MonoBehaviour {
    // Use this for initialization
    void Start () {
    }
    // Update is called once per frame
    void Update () {
        //select ();
        if (Input.touchCount == 1)
        {
            Vector3 wp = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
            Vector2 touchPos = new Vector2(wp.x, wp.y);
            if (collider2D == Physics2D.OverlapPoint(touchPos))
            {
                Material newMat = Resources.Load("New Material", typeof(Material)) as Material;
                gameObject.renderer.material = newMat;
                PlayersManager.objPlayerList.Add(PlayersManager.setPlayerObject("Bear"));
                countausplayer.countteam++;
            }
        }
    }
}

请指引我哪里不对?为什么列表的大小会自行增加?

为什么Update()会多次调用自己

Update在每一帧中都被调用,如果用户的手指在你的项目上并将项目添加到列表中,那么你基本上是在测试每一帧。如果你有一个长期接触,你会得到更多的补充。

相反,您应该测试触摸是否已经结束,您可以使用TouchPhase进行测试。

右侧TouchPhaseTouchPhase.Ended

这意味着一根手指被从屏幕上举起。这是触摸的最后阶段。

或者在您的代码中:

void Update () {
    //select ();
    int i = 0;
    while (i < Input.touchCount) {
        if (Input.GetTouch(i).phase == TouchPhase.Ended)
            Vector3 wp = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position);
            Vector2 touchPos = new Vector2(wp.x, wp.y);
            if (collider2D == Physics2D.OverlapPoint(touchPos))
            {
                Material newMat = Resources.Load("New Material", typeof(Material)) as Material;
                gameObject.renderer.material = newMat;
                PlayersManager.objPlayerList.Add(PlayersManager.setPlayerObject("Bear"));
                countausplayer.countteam++;
            }
        }
    }
}

我之前的回答是错误的。。。

我想你已经有了解决方案:

  • http://docs.unity3d.com/ScriptReference/Input.GetTouch.html

  • https://www.youtube.com/watch?v=zszQA9httVo

您应该查找Input.touchCount > 0 && TouchPhase.TheOneYouWant