在Unity3d中设置多个输入字段有问题

本文关键字:输入 字段 有问题 Unity3d 设置 | 更新日期: 2023-09-27 18:30:02

我目前正试图在Unity中设置多个输入字段,但遇到了问题。我只能获得一个输入(intPressure),但不知道如何添加第二个输入(drillpipe)。在我看来,统一一次只允许一个输入域。我认为只要将其更改为InputField2等就可以了,但这似乎不起作用。其他人提到创建一个空的游戏对象并将输入字段插入到每个游戏对象中。

老实说,我仍然对如何设置第二个输入字段感到困惑。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
    public class UserInput : MonoBehaviour {
        InputField input;
        int intPressure = 0;
        int drillpipe = 0;
        public DataManager data;
        void Start ()    
        {
            var input = gameObject.GetComponent<InputField>();
            var se= new InputField.SubmitEvent();
            se.AddListener(SubmitName);
            input.onEndEdit = se;
        }
        private void SubmitName(string pressure)    
        {
            var pressureScript = 
              GameObject.FindObjectOfType(typeof(DataManager)) as DataManager;
            if (int.TryParse(pressure, out intPressure))
            {
                pressureScript.pressure = intPressure;
            }
            else
            {
                // Parse fail, show an error or something
            }
        }
   }

在Unity3d中设置多个输入字段有问题

我不确定你想要实现这一点的方式(使用单个GameObject),但是如果你在另一个GameObject(让我们称之为UserInputRoot)中嵌套了几个GameObject(每个控件一个对象),你肯定能够做到这一点:

  UserInputRoot (has UserInputController script)
  |
  +--- InputPressure (has InputField component)
  |
  +--- InputDrillpipe (has InputField component)

然后,控制脚本将具有两个公共InputField或两个私有InputField,在Start()或Awake()方法中初始化:

class UserInputController : MonoBehaviour {
    //These can be set from the inspector and controlled from within the script
    public InputField PressureInput;  
    public InputField DrillpipeInput; 
    // It would be better to pass this reference through
    // the inspector instead of searching for it every time
    // an input changes
    public DataManager dataManager;
    private void Start() {
        // There is no actual need in creating those SubmitEvent objects.
        // You can attach event handlers to existing events without a problem.
        PressureInput.onEndEdit.AddListener(SubmitPressureInput);
        DrillpipeInput.onEndEdit.AddListener(SubmitDrillpipeInput);
    }
    private void SubmitDrillpipeInput(string input) {
        int result;
        if (int.TryParse(input, out result)) {
            dataManager.drillpipe = result;
        }
    }
    private void SubmitPressureInput(string input) {
        int result;
        if (int.TryParse(input, out result)) {
            dataManager.pressure = result;
        }
    }
}

顺便说一句,你的代码格式非常糟糕。你必须修复它。

您显示的脚本似乎附加到了一个输入字段游戏对象上,对吗?对象中有一个名为input的成员变量,但随后在Start方法中创建了一个新变量input。与其将脚本附加到第一个InputField,不如在编辑器中创建一个空的游戏对象,并将脚本附加到此对象。在脚本中添加两个公共成员:

 public class UserInput : MonoBehaviour {
  public InputField PressureInput;
  public InputField DrillPipeInput;

现在回到编辑器,当您选择空的游戏对象时,您应该会看到两个输入字段。将两个输入字段拖放到每个输入字段的插槽中。现在,当场景启动时,UserInput脚本将设置有输入字段,您可以同时使用它们。