You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现支持创建InputField、点击随机展示名称的Unity脚本?

Unity 输入存储与随机名称展示功能实现指导

一、基础变量与配置

首先在脚本中定义核心变量,通过Unity编辑器拖拽赋值对应UI组件:

using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;

public class NameManager : MonoBehaviour
{
    // 拖拽赋值:所有需要收集输入的InputField对象
    public GameObject[] inputFields;
    // 输入界面:显示已存储名称的Text组件
    public Text textDisplay;
    // 随机展示界面:显示结果的Text组件
    public Text randomNameDisplay;
    // 存储所有有效输入名称的列表
    private List<string> names = new List<string>();
    // 随机数生成器
    private System.Random random = new System.Random();

    // 界面切换用的面板对象,需拖拽赋值
    public GameObject inputPanel;
    public GameObject randomPanel;
}

二、优化StoreName方法

针对你提供的代码做功能补全与性能优化,避免重复存储空内容:

public void StoreName()
{
    names.Clear(); // 清空旧数据,防止重复存储
    foreach (var inputObj in inputFields)
    {
        InputField input = inputObj.GetComponent<InputField>();
        // 仅收集非空且去除首尾空格的有效内容
        if (input != null && !string.IsNullOrWhiteSpace(input.text))
        {
            names.Add(input.text.Trim());
        }
    }

    // 用StringBuilder优化字符串拼接效率
    System.Text.StringBuilder resultBuilder = new System.Text.StringBuilder();
    foreach (string name in names)
    {
        resultBuilder.AppendLine(name);
    }
    textDisplay.text = resultBuilder.ToString();
}

三、实现随机展示功能

添加按钮触发的随机抽取方法,点击后在目标界面显示随机名称:

public void ShowRandomName()
{
    if (names.Count == 0)
    {
        randomNameDisplay.text = "暂无存储的名称";
        return;
    }
    // 生成随机索引并展示对应名称
    int randomIndex = random.Next(0, names.Count);
    randomNameDisplay.text = names[randomIndex];
}

四、界面切换逻辑

添加面板切换方法,绑定到对应按钮实现两个界面的切换:

public void SwitchToRandomPanel()
{
    inputPanel.SetActive(false);
    randomPanel.SetActive(true);
}

public void SwitchToInputPanel()
{
    randomPanel.SetActive(false);
    inputPanel.SetActive(true);
}

五、UI绑定与注意事项

  1. 在Unity编辑器中创建两个UI面板:
    • 输入面板:包含所有InputField、「存储名称」按钮、「切换到随机展示」按钮
    • 随机展示面板:包含显示随机名称的Text、「随机抽取」按钮、「返回输入界面」按钮
  2. 按钮绑定:
    • 「存储名称」按钮绑定NameManager的StoreName方法
    • 「随机抽取」按钮绑定ShowRandomName方法
    • 切换按钮分别绑定对应的SwitchToXXXPanel方法
  3. 可选:如果需要持久化存储名称(重启游戏不丢失),可以添加PlayerPrefs序列化逻辑:
    public void SaveNames()
    {
        string json = JsonUtility.ToJson(new ListWrapper { names = names });
        PlayerPrefs.SetString("StoredNames", json);
    }
    
    private void Start()
    {
        if (PlayerPrefs.HasKey("StoredNames"))
        {
            string json = PlayerPrefs.GetString("StoredNames");
            ListWrapper wrapper = JsonUtility.FromJson<ListWrapper>(json);
            names = wrapper.names;
        }
    }
    
    [System.Serializable]
    private class ListWrapper
    {
        public List<string> names;
    }
    

内容的提问来源于stack exchange,提问作者MisterAmigo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:01:11