示例#1
0
    /// <summary>
    /// 更新部件
    /// </summary>
    /// <param name="name">部件名称</param>
    /// <param name="assetName">资源名称</param>
    /// <param name="partitionObj">部件数据对象</param>
    /// <param name="isLinkObj">是否有部件信息组件</param>
    void UpdatePartition(string name, string assetName, GameObject partitionObj, bool isLinkObj = false)
    {
        if (!m_Partitions.ContainsKey(name))
        {
            EB.Debug.LogError(string.Format("更新部件,发现这个部件不存在部件列表当中,: {0} ,部件的资源名称: {1}!", name, assetName));
        }

        PartitionObject partition = m_Partitions[name];

        if (partition == null)
        {
            return;
        }

        if (!isLinkObj)        //现在默认都是没有部件列表的组件了,每次都进去
        {
            partition.ClearMeshObjects();
        }

        //initialize character partition: load skinnedmeshes and set materials
        CharacterPartition characterPartition = partitionObj.GetComponent <CharacterPartition>();

        if (characterPartition != null)
        {
            characterPartition.Initialize();
        }

        ColorCustomization customization = partitionObj.GetComponent <ColorCustomization>();

        if (customization != null)
        {
            customization.ApplyColor();
        }
        bool isChildrenPatition = IsChildrenPartition(name, assetName);

        //日志
        EB.Debug.LogObjectMgrAsset("<color=#00ff00>更新合并部件的骨骼:{0}</color>,,assetName:<color=#00ff00>{1}</color>是否为这个角色的子级:<color=#00ff00>{2}</color>,isLinkObj:<color=#00ff00>{3}</color>"
                                   , name, assetName, isChildrenPatition, isLinkObj);
        //
        if (isChildrenPatition)
        {
            //更新部件,先注掉,因为业务逻辑已经过老了
            UpdateChildrenPartition(partition, name, assetName, partitionObj);
        }
        else
        {
            try
            {
                UpdateCombineBonePartition(partition, name, assetName, partitionObj, isLinkObj);
            }
            catch (System.NullReferenceException e)
            {
                EB.Debug.LogError(e.ToString());
            }
            partition.UnregisterObject(partitionObj);
        }

        if (SyncLoad && m_ToLoad.Count == 0)
        {
            var iter = m_Partitions.GetEnumerator();
            while (iter.MoveNext())
            {
                iter.Current.Value.ShowMeshObjects();
            }
            iter.Dispose();
        }

        CharacterColorScale colorScale = GetComponent <CharacterColorScale>();

        if (colorScale != null)
        {
            colorScale.ForceUpdateColorScale();
        }
    }