首页 > 解决方案 > 数组索引超出范围,在其他帖子中找不到答案

问题描述

我正在使用 Blender 中的混合形状创建设备系统,但现在我添加了另一个混合形状,它不起作用。我收到此错误消息:

数组索引 (5) 超出范围 (size=5)

这是脚本中不起作用的部分:

public void UnequipAll()
{
    for (int i = 0; i < currentEquipment.Length; i++)
    {
        Unequip(i);
    }
    EquipDefaultItems();
}

void SetEquipmentBlendShapes(Equipment item, int weight)
{
    foreach (EquipmentMeshRegion blendShape in item.coveredMeshRegions)
    {
        targetMesh.SetBlendShapeWeight((int)blendShape, weight);
    }
}

第二个脚本:

public class Equipment : Item
{

    public EquipmentSlot equipSlot;
    public SkinnedMeshRenderer mesh;
    public EquipmentMeshRegion[] coveredMeshRegions;

    public int armorModifier;
    public int damageModifier;

    public override void Use()
    {
        base.Use();
        EquipmentManager.instance.Equip(this);
        RemoveFromInventory();
    }

}

public enum EquipmentSlot { Head, Chest, Legs, Weapon, Feet, Shield, Hands }
public enum EquipmentMeshRegion { Legs, Arms, Feet, Head, Chest, Hands };

标签: c#arraysunity3dindexing

解决方案


根据文档SetBlendShapeWeight()按照int indexandfloat value的顺序。

您的代码将 a 转换为 aEquipmentMeshRegionint不是传递实际索引。

尝试用foreach常规替换循环for

for(int index = 0; index < item.coveredMeshRegions.Length; index++)
{
    targetMesh.SetBlendShapeWeight(index, weight);
}

推荐阅读