C# 为什么计数器变量重置为0? 使用系统集合; 使用System.Collections.Generic; 使用System.Text.RegularExpressions; 使用UnityEngine; 公共类SecurityKeypadKeys:单行为 { 公共文本网格文本; 专用整数计数器=0; 私有void Start() { } 私有void OnMouseDown() { string[]digits=Regex.Split(transform.name,@“\D+”); foreach(以数字表示的字符串值) { 整数; if(int.TryParse(值,输出编号)) { 计数器++; 如果(计数器

C# 为什么计数器变量重置为0? 使用系统集合; 使用System.Collections.Generic; 使用System.Text.RegularExpressions; 使用UnityEngine; 公共类SecurityKeypadKeys:单行为 { 公共文本网格文本; 专用整数计数器=0; 私有void Start() { } 私有void OnMouseDown() { string[]digits=Regex.Split(transform.name,@“\D+”); foreach(以数字表示的字符串值) { 整数; if(int.TryParse(值,输出编号)) { 计数器++; 如果(计数器,c#,unity3d,C#,Unity3d,我使用了一个断点,发现如果我按下数字1的按钮并按下8次,它将停止向文本写入下一个数字1,但如果我单击数字2,它将向文本写入另一个数字2的8倍 但是我希望玩家能够只键入8个数字,无论是12345678或8888888或0000000或56498611,如果玩家继续键入,则不会在文本中添加更多数字 问题是脚本附加到10个立方体上,它们的行为类似于按钮。因此,每次我单击另一个多维数据集(按钮)时,它都会将计数器重置为0。根据您的问题,我假设每个按钮都有不同的SecurityKeypadKeys实例。每

我使用了一个断点,发现如果我按下数字1的按钮并按下8次,它将停止向文本写入下一个数字1,但如果我单击数字2,它将向文本写入另一个数字2的8倍

但是我希望玩家能够只键入8个数字,无论是12345678或8888888或0000000或56498611,如果玩家继续键入,则不会在文本中添加更多数字


问题是脚本附加到10个立方体上,它们的行为类似于按钮。因此,每次我单击另一个多维数据集(按钮)时,它都会将计数器重置为0。

根据您的问题,我假设每个按钮都有不同的SecurityKeypadKeys实例。每个实例都有自己的计数器,初始化为0,但写入相同的text.text。这意味着每一个数字都可以被按下8次

要更正此问题,您有两个选项:

  • 将静态关键字添加到计数器声明中<代码>专用静态整数计数器=0这将只允许输入8个数字,除非您向类中添加另一个方法来重置计数器
  • 在所有按钮之间共享类的同一实例,而不是为每个按钮创建新实例<代码>var键盘=新的SecurityKeypadKeys()此方法允许您在每次需要8个数字时创建新实例,而无需重置方法
  • 另一方面,我建议将计数器增量移到if语句中。否则,如果调用该函数的次数足够多,int可能会重载回-2147483648,从而重新启用要添加的更多数字

    using System.Collections;
    using System.Collections.Generic;
    using System.Text.RegularExpressions;
    using UnityEngine;
    
    public class SecurityKeypadKeys : MonoBehaviour
    {
        public TextMesh text;
    
        private int counter = 0;
    
        private void Start()
        {
            
        }
    
        private void OnMouseDown()
        {
            string[] digits = Regex.Split(transform.name, @"\D+");
            foreach (string value in digits)
            {
                int number;
                if (int.TryParse(value, out number))
                {
                    counter++;
                    if (counter < 8)
                    {
                        text.text += number.ToString();
                    }
                }
            }
        }
    }
    
    if(计数器<8)
    {
    计数器++;
    text.text+=number.ToString();
    }
    
    您使用的是实例字段,而您可能打算使用静态字段。通过将
    private static int counter=0,将
    计数器设置为
    static
    字段。有关更多信息,请参见此处:
    if (counter < 8)
    {
        counter++;
        text.text += number.ToString();
    }