Unity中点击不同3D立方体显示对应文本并停止旋转的问题求助
解决方案:Unity立方体点击显示对应文本并停止旋转
核心思路
让每个立方体通过独立的脚本实例控制自身状态(旋转、点击),绑定专属的文本对象/内容,避免共用全局变量导致的串味问题。
具体实现步骤
1. 准备UI文本(两种可选方案)
方案A:每个立方体对应独立文本
- 在场景中创建
Canvas,右键添加4个Text组件,命名为Cube1Text、Cube2Text、Cube3Text、Cube4Text。 - 分别给每个Text输入对应立方体的文本内容,初始状态设置为隐藏(取消Inspector面板的
Set Active勾选)。
方案B:单个全局文本显示不同内容
- 在场景中创建
Canvas,添加1个Text组件,命名为GlobalTipText,初始状态设置为隐藏。
2. 编写立方体控制脚本
创建C#脚本CubeClickHandler.cs,代码如下:
using UnityEngine; using UnityEngine.UI; public class CubeClickHandler : MonoBehaviour { // 旋转速度,可在Inspector调整 public float rotateSpeed = 20f; // 方案A:绑定当前立方体对应的专属文本对象 public GameObject targetText; // 方案B:当前立方体要显示的文本内容 public string cubeDisplayText; // 方案B:绑定全局文本对象 public GameObject globalText; private bool isClicked = false; void Update() { // 未点击时保持旋转 if (!isClicked) { transform.Rotate(Vector3.up, rotateSpeed * Time.deltaTime); } } // 鼠标点击立方体触发(需确保立方体有非触发器碰撞体) void OnMouseDown() { isClicked = true; // 执行方案A的逻辑(二选一) if (targetText != null) { targetText.SetActive(true); } // 执行方案B的逻辑(二选一,注释掉方案A代码即可) // if (globalText != null) // { // globalText.GetComponent<Text>().text = cubeDisplayText; // globalText.SetActive(true); // } } }
3. 配置每个立方体
- 给每个立方体添加
Box Collider(确保Is Trigger未勾选,否则OnMouseDown无法触发)。 - 将
CubeClickHandler脚本分别拖到4个立方体上。 - 根据选择的方案配置参数:
- 方案A:每个立方体的
targetText字段拖入对应的CubeXText对象。 - 方案B:每个立方体的
cubeDisplayText输入对应文本,globalText字段拖入GlobalTipText对象。
- 方案A:每个立方体的
常见问题排查
- 点击无反应:检查立方体是否有
Box Collider,且Is Trigger未勾选;确保相机能看到立方体(OnMouseDown依赖射线检测)。 - 文本显示混乱:检查每个脚本实例的参数是否绑定正确,避免多个立方体引用同一个文本对象;确认
isClicked变量是实例变量(非静态),保证每个立方体独立控制状态。
内容的提问来源于stack exchange,提问作者Black11
相关产品推荐
相关产品推荐

