如何实现支持创建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绑定与注意事项
- 在Unity编辑器中创建两个UI面板:
- 输入面板:包含所有InputField、「存储名称」按钮、「切换到随机展示」按钮
- 随机展示面板:包含显示随机名称的Text、「随机抽取」按钮、「返回输入界面」按钮
- 按钮绑定:
- 「存储名称」按钮绑定
NameManager的StoreName方法 - 「随机抽取」按钮绑定
ShowRandomName方法 - 切换按钮分别绑定对应的
SwitchToXXXPanel方法
- 「存储名称」按钮绑定
- 可选:如果需要持久化存储名称(重启游戏不丢失),可以添加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
相关产品推荐
相关产品推荐

