Example #1
0
 /// <summary>
 /// 脱下时装
 /// </summary>
 private void TakeOffTheFashion(CostumeDefine fashionInfo)
 {
     //
     if (_curUsedFashions.Contains(fashionInfo.CostumeId))
     {
         //换装
         HallRoleManager.Instance.CurRole.NotifyDressUp(fashionInfo, true);
         //
         _curUsedFashions.Remove(fashionInfo.CostumeId);
         //更新冲突类型
         UpdateConflictTypes();
     }
 }
Example #2
0
    //Live2D换装思路
    //将live2D模型固定一套基础样式(默认裸妆/只你内衣)然后按照部位划分 每个部位单独对应一张贴图 客户端更换贴图实现换装
    //需求
    //1.live2D模型给到时所有的部位都要显示出来
    //2.部位 对应 id/名称
    //处理
    //1.部位的显示 控制方式2种 都需要在 LateUpdate() 中进行更新
    //(1).控制 CubismModel->Parameters 需要客户端测试参数对应位置
    //(2).控制 CubismModel->Parts->Id 与live2D模型给到的部位id一致 (当前选用的方式)
    //2.通过CubismRenderController 获取所有的 CubismRenderer 然后对比 CubismRenderer->MainTexture.name //贴图名称
    //3.对比贴图名称判断是否为需要更新的贴图 然后更换贴图
    //完成换装



    /// <summary>
    /// 通知换装
    /// </summary>
    /// <param name="costume"></param>
    /// <param name="isTakeOff">是否为脱下时装</param>
    public async void NotifyDressUp(CostumeDefine costume, bool isTakeOff = false)
    {
        if (isTakeOff)
        {
            //await UniTask.WaitForEndOfFrame();
            //更新换装部位
            UpdateParts(costume.ShowParts, null);
            return;
        }
        //换装贴图
        UpdateTexture(costume.UseTexture);
        await UniTask.WaitForEndOfFrame();//UniTask.Delay(200);

        //更新换装部位
        UpdateParts(costume.HideParts, costume.ShowParts);
    }
Example #3
0
    /// <summary>
    /// 更新冲突类型
    /// </summary>
    private void UpdateConflictTypes()
    {
        _curConflictTypes.Clear();
        CostumeDefine costumeDefine = null;

        for (int i = 0; i < _curUsedFashions.Count; i++)
        {
            costumeDefine = StaticData.configExcel.GetCostumeByCostumeId(_curUsedFashions[i]);
            for (int j = 0; j < costumeDefine.ConflictTypes.Count; j++)
            {
                if (!_curConflictTypes.Contains(costumeDefine.ConflictTypes[j]))
                {
                    _curConflictTypes.Add(costumeDefine.ConflictTypes[j]);
                }
            }
        }
    }
Example #4
0
    /// <summary>
    /// 获取使用的冲突的时装和同类型的时装
    /// </summary>
    /// <param name="conflictType"></param>
    /// <returns></returns>
    private void GetUsedConflictFashion(CostumeType sameType, List <CostumeType> conflictTypes, ref List <int> conflictTypeIDs)
    {
        CostumeDefine costumeDefine = null;

        for (int i = 0; i < _curUsedFashions.Count; i++)
        {
            costumeDefine = StaticData.configExcel.GetCostumeByCostumeId(_curUsedFashions[i]);
            if (costumeDefine.Type == sameType)
            {
                conflictTypeIDs.Add(_curUsedFashions[i]);
                continue;
            }
            if (conflictTypes.Contains(costumeDefine.Type))
            {
                conflictTypeIDs.Add(_curUsedFashions[i]);
                continue;
            }
        }
    }
Example #5
0
    /// <summary>
    /// 获取当前角色的全部时装
    /// </summary>
    /// <param name="isActive"></param>
    public List <CostumeDefine> GetCurRoleAllFashions(int selectedRoleID = 0, List <int> roleFashionList = null)
    {
        List <CostumeDefine> costumes = new List <CostumeDefine>();

        //获取玩家角色的数据
        if (selectedRoleID == 0 && roleFashionList == null)
        {
            selectedRoleID = _curSelectedRoleID;
            for (int i = 0; i < StaticData.playerInfoData.userInfo.HallRoleInfo.Count; i++)
            {
                if (StaticData.playerInfoData.userInfo.HallRoleInfo[i].RoleId == selectedRoleID)
                {
                    string choiceDesc  = StaticData.playerInfoData.userInfo.HallRoleInfo[i].ChoiceList;
                    var    fashionList = choiceDesc.Split(',');

                    roleFashionList = new List <int>();
                    for (int j = 0; j < fashionList.Length; j++)
                    {
                        roleFashionList.Add(Convert.ToInt32(fashionList[j]));
                    }
                }
            }
        }

        //
        if (roleFashionList == null)
        {
            return(costumes);
        }

        CostumeDefine fashion = null;

        for (int i = 0; i < roleFashionList.Count; i++)
        {
            fashion = StaticData.configExcel.GetCostumeByCostumeId(roleFashionList[i]);
            if (fashion != null && fashion.RoleId == selectedRoleID)
            {
                costumes.Add(fashion);
            }
        }
        return(costumes);
    }
Example #6
0
    /// <summary>
    /// 穿戴时装
    /// </summary>
    /// <param name="fashionInfo"></param>
    private void WearFashion(CostumeDefine fashionInfo)
    {
        //
        ClearFashionSelectedEffect?.Invoke();
        ClearFashionConflictEffect?.Invoke();

        //获取需要移除的时装
        //冲突的时装id 和 相同类型的时装id
        List <int> conflictTypeIDs = new List <int>();

        //1.获取冲突类型 获取冲突时装id
        GetUsedConflictFashion(fashionInfo.Type, fashionInfo.ConflictTypes, ref conflictTypeIDs);
        CostumeDefine costumeDefine = null;

        //2.移除冲突时装id 和 相同类型的时装id
        for (int i = 0; i < conflictTypeIDs.Count; i++)
        {
            if (_curUsedFashions.Contains(conflictTypeIDs[i]))
            {
                //
                costumeDefine = StaticData.configExcel.GetCostumeByCostumeId(conflictTypeIDs[i]);
                //脱下时装
                TakeOffTheFashion(costumeDefine);
            }
        }

        //换装
        HallRoleManager.Instance.CurRole.NotifyDressUp(fashionInfo);

        //更新当前角色使用时装数据
        //添加新的时装id
        if (!_curUsedFashions.Contains(fashionInfo.CostumeId))
        {
            _curUsedFashions.Add(fashionInfo.CostumeId);
        }
        //更新冲突类型
        UpdateConflictTypes();
    }
Example #7
0
    /// <summary>
    /// 初始化换装
    /// </summary>
    public async void InitDressUp(List <int> costumeIDs)
    {
        Debug.Log("InitDressUp 初始化换装!");

        _needHideParts.Clear();
        _needShowParts.Clear();

        List <string> hideParts = new List <string>();
        List <string> showParts = new List <string>();

        //影藏全部部位 需要后续添加
        hideParts.Add("xiezi");
        hideParts.Add("tfaqian");
        hideParts.Add("tfaqianchang");
        hideParts.Add("tfahou");
        hideParts.Add("nabao");
        hideParts.Add("nabao2");
        hideParts.Add("bao2");
        hideParts.Add("bao");
        hideParts.Add("nabao3");
        hideParts.Add("nabao4");
        hideParts.Add("bao3");
        hideParts.Add("bao4");
        hideParts.Add("maozi");
        hideParts.Add("toushi2");
        hideParts.Add("weijin");
        hideParts.Add("dayi");
        hideParts.Add("erhuan");
        hideParts.Add("xiangquan");
        hideParts.Add("xianglian");
        hideParts.Add("shoushi");
        hideParts.Add("wazi");
        hideParts.Add("kuzi");
        hideParts.Add("lianyiqun");
        hideParts.Add("lianyiqun2");
        hideParts.Add("xiayi");
        hideParts.Add("xiayi2");
        hideParts.Add("xiajinshenqun");
        hideParts.Add("xiajinshenqun2");
        hideParts.Add("shangyi");
        hideParts.Add("toushi1");
        hideParts.Add("toushi");
        hideParts.Add("tfagaomawei");
        hideParts.Add("tfadimawei");
        hideParts.Add("tfahoumawei");
        //hideParts.Add("youshou");
        //hideParts.Add("zuoshou");

        List <CostumeTextureInfo> useTexture = new List <CostumeTextureInfo>();

        CostumeDefine costume = null;

        for (int i = 0; i < costumeIDs.Count; i++)
        {
            costume = StaticData.configExcel.GetCostumeByCostumeId(costumeIDs[i]);

            useTexture.AddRange(costume.UseTexture);
            for (int j = 0; j < costume.HideParts.Count; j++)
            {
                if (!hideParts.Contains(costume.HideParts[j]))
                {
                    hideParts.Add(costume.HideParts[j]);
                }
            }
            for (int j = 0; j < costume.ShowParts.Count; j++)
            {
                //将显示的从影藏中移除
                if (hideParts.Contains(costume.ShowParts[j]))
                {
                    hideParts.Remove(costume.ShowParts[j]);
                }
                if (!showParts.Contains(costume.ShowParts[j]))
                {
                    showParts.Add(costume.ShowParts[j]);
                }
            }
        }

        //更新换装部位
        UpdateParts(hideParts, showParts);
        await UniTask.WaitForEndOfFrame();//UniTask.Delay(300);

        //换装贴图
        UpdateTexture(useTexture, true);
    }