Unity中如何将Text拖入列表?井字棋开发拖拽问题排查
井字棋开发问题:无法将Text对象拖入MainController列表
问题背景
我正在跟着教程开发Unity井字棋游戏,在教程的图41步骤卡住了,需要把Text对象拖进MainController的space_list列表里,但遇到了以下问题:
- SpaceText是不是必须变成蓝色才能拖拽到列表里?怎么解决?
- SpaceText没法拖拽到Assets文件夹里。
补充:进入SpaceText预制体模式后拖拽到Assets的情况(附截图)
相关截图
- 拖拽问题截图1:

- 拖拽问题截图2:

- 预制体拖拽后截图:

相关代码
Space.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class Space : MonoBehaviour { public Button button; public Text button_text; private MainController main_controller; public void SetControllerReference(MainController control) { main_controller = control; } public void SetSpace() { button_text.text = main_controller.GetSide(); button.interactable = false; main_controller.EndTurn(); } }
MainController.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; public class MainController : MonoBehaviour { public TextMeshProUGUI[] space_list; public GameObject game_over_panel; public TextMeshProUGUI game_over_text; public GameObject restart_button; private string side; private int moves; void Start() { SetMainControllerReferenceForButtons(); side = "X"; game_over_panel.SetActive(false); moves = 0; restart_button.SetActive(false); } void SetMainControllerReferenceForButtons() { for (int i = 0; i < space_list.Length; i++){ space_list[i].GetComponentInParent<Space>().SetControllerReference(this); } } public string GetSide() { return side; } void ChangeSide() { if (side == "X") { side = "O"; } else { side = "X"; } } public void EndTurn() { moves++; if (space_list[0].text == side && space_list[1].text == side && space_list[2].text == side) { GameOver(); } else if (space_list[3].text == side && space_list[4].text == side && space_list[5].text == side) { GameOver(); } else if (space_list[6].text == side && space_list[7].text == side && space_list[8].text == side) { GameOver(); } else if (space_list[0].text == side && space_list[3].text == side && space_list[6].text == side) { GameOver(); } else if (space_list[1].text == side && space_list[4].text == side && space_list[7].text == side) { GameOver(); } else if (space_list[2].text == side && space_list[5].text == side && space_list[8].text == side) { GameOver(); } else if (space_list[0].text == side && space_list[4].text == side && space_list[8].text == side) { GameOver(); } else if (space_list[2].text == side && space_list[4].text == side && space_list[6].text == side) { GameOver(); } if (moves >= 9) { game_over_panel.SetActive(true); game_over_text.text = "平局"; restart_button.SetActive(true); } ChangeSide(); } void GameOver() { game_over_panel.SetActive(true); game_over_text.text = side + " 获胜!"; restart_button.SetActive(true); for (int i = 0; i < space_list.Length; i++) { SetInteractable(false); } } void SetInteractable(bool setting) { for (int i = 0; i < space_list.Length; i++) { space_list[i].GetComponentInParent<Button>().interactable = setting; } } public void Restart() { side = "X"; moves = 0; game_over_panel.SetActive(false); SetInteractable(true); restart_button.SetActive(false); for (int i = 0; i < space_list.Length; i++) { space_list[i].text = ""; } } }
解决方案
1. SpaceText拖拽到列表的问题
不需要把SpaceText变成蓝色(蓝色代表预制体),直接拖拽Hierarchy面板中每个SpaceText实例到MainController的space_list列表里即可。教程里的蓝色是指预制体,但实际操作中,你只需要将场景中的Text对象拖入,因为space_list是TextMeshProUGUI[]类型,只要对象带有该组件就能拖入。
如果拖不进去,检查以下两点:
- 确认SpaceText对象上挂载的是
TextMeshProUGUI组件,而非普通Text组件(你的MainController定义的是TextMeshProUGUI[],但Space.cs里用的是Text button_text,类型不匹配,建议统一成TextMeshProUGUI避免后续报错)。 - 选中MainController对象,在Inspector面板展开
space_list,将列表长度调整为9,再逐个拖入Hierarchy中的SpaceText。
2. SpaceText无法拖拽到Assets的问题
只有预制体才能拖入Assets文件夹。正确制作预制体的步骤是:
- 在Hierarchy中选中SpaceText(或包含Button和Text的整个Space父对象)。
- 直接拖到Assets文件夹,无需进入预制体模式——进入预制体模式是编辑内容,此时无法再拖入Assets。
- 从截图看你已成功创建预制体,现在可以将场景中的SpaceText替换为预制体实例,再把这些实例的Text组件拖入MainController的列表。
额外注意:组件类型匹配
代码里存在组件类型不匹配问题:
- MainController的
space_list是TextMeshProUGUI[],但Space.cs里的button_text是Text类型。如果你的UI用的是TextMeshPro,建议把Space.cs里的button_text改成TextMeshProUGUI,并在Inspector中重新指定组件,避免运行时找不到组件的错误。
内容的提问来源于stack exchange,提问作者code_rushh
相关产品推荐
相关产品推荐

