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

Unity C#脚本问题:点击对象切换激活状态失效排查

Unity 3D点击切换模型显示/隐藏问题修复

你的脚本存在三个核心问题:

  • 变量未初始化:SittingGuyc和StandingGuyc是私有变量,没有赋值就调用SetActive,会直接触发空引用异常。
  • 点击触发条件缺失:OnMouseUpAsButton需要目标对象带有碰撞体组件(如BoxCollider/SphereCollider),且碰撞体的Is Trigger不能勾选,否则无法触发鼠标点击事件。
  • 逻辑不完整:当前只实现了从坐姿切换到站姿的单向逻辑,没有处理反向切换的情况。

修正后的脚本代码

using UnityEngine;

public class ModelToggle : MonoBehaviour
{
    // 用[SerializeField]让变量在Inspector面板可见,方便手动赋值
    [SerializeField] private GameObject sittingGuy;
    [SerializeField] private GameObject standingGuy;

    private void Start()
    {
        // 初始化默认显示状态(确保两个模型状态互斥)
        if (sittingGuy != null && standingGuy != null)
        {
            sittingGuy.SetActive(true);
            standingGuy.SetActive(false);
        }
    }

    private void OnMouseUpAsButton()
    {
        // 先检查变量是否赋值,避免空引用报错
        if (sittingGuy == null || standingGuy == null)
        {
            Debug.LogError("请在Inspector面板中为sittingGuy和standingGuy绑定对应模型!");
            return;
        }

        // 双向切换模型激活状态
        sittingGuy.SetActive(!sittingGuy.activeSelf);
        standingGuy.SetActive(!standingGuy.activeSelf);
    }
}

操作步骤:

  1. 将脚本挂载到任意一个模型对象上,或单独创建空对象作为管理器挂载。
  2. 在Unity Inspector面板中,把坐姿模型拖入sittingGuy字段,站姿模型拖入standingGuy字段。
  3. 给两个模型都添加碰撞体组件(如BoxCollider),调整碰撞体大小使其覆盖模型,确保Is Trigger未勾选。
  4. 运行场景,点击当前显示的模型,即可切换到另一个模型。

额外排查点:

  • 若点击无反应,检查模型是否在相机视野内,碰撞体是否被其他物体遮挡。
  • 可在OnMouseUpAsButton开头添加Debug.Log("点击触发"),验证点击事件是否正常响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:55:11