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

Unity脚本修改GameObject层失败:掉落物品层始终为Default的问询

解决Unity掉落物品层设置无效的问题

核心问题分析

你遇到的情况大概率是两个原因:一是层名拼写错误(你注释里写的Grababbles比目标层名Grabbables少了一个b),二是仅设置了父物体的层,但预制体包含子物体,子物体的层仍为Default,导致编辑器视觉上显示异常;另外也可能有其他脚本在实例化后覆盖了层设置。

有效解决方案

直接使用层编号(你指定的9)来设置,同时递归同步所有子物体的层,避免名称拼写问题和子物体层不同步的情况。

修改后的掉落逻辑代码

在实例化物品后,添加统一的层设置逻辑(可以放在所有物品类型判断之外,确保所有掉落物品都生效):

if(newClickedName == "Drop_Button"){
    string tempItemName;
    int tempItemAmt;
    int tempItemWeight;
    
    var itemData = inventory.GetItemList()[itemElem];
    tempItemName = itemData.itemType.ToString();
    tempItemAmt = itemData.amount;
    tempItemWeight = itemData.weight;

    GameObject itemDropped = Instantiate(itemData.GetModel(), player.position, Quaternion.identity);
    itemDropped.SetActive(true);

    // --- 新增:统一设置掉落物品的层 ---
    int targetLayer = 9; // 对应Grabbables层的编号
    SetLayerRecursively(itemDropped, targetLayer);
    // -------------------------------

    // Edgecase to check if its Money:
    if(tempItemName == "Money"){
        itemDropped.GetComponent<GrabMoneyStack>().currentMoneyAmt = tempItemAmt;
        itemDropped.GetComponent<GrabMoneyStack>().beingDropped = true;
    }else if(tempItemName == "Meth"){
        itemDropped.GetComponent<DrugMethScript>().currentDrugAmt = tempItemAmt;
        itemDropped.GetComponent<DrugMethScript>().beingDropped = true;
    }
}

// 新增递归设置层的方法
void SetLayerRecursively(GameObject obj, int layer)
{
    obj.layer = layer;
    foreach (Transform child in obj.transform)
    {
        SetLayerRecursively(child.gameObject, layer);
    }
}

额外排查点

  1. 确认Unity编辑器中层编号9确实对应Grabbables:打开Edit > Project Settings > Tags and Layers,检查Layers列表里的编号。
  2. 检查物品预制体的脚本:如果预制体上的Awake/Start方法里有设置层的代码,会覆盖你在掉落逻辑中的设置,需要移除或调整执行顺序。
  3. 验证Debug输出:在设置层后添加Debug.Log($"物品{tempItemName}的层已设置为:{itemDropped.layer},目标层编号:{targetLayer}");,确认层值是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:27:19