public void Bake(apPortrait portrait, apOptModifierUnitBase parentModifier, apModifierParamSetGroup srcParamSetGroup)
        {
            _portrait       = portrait;
            _parentModifier = parentModifier;

            _syncTarget = srcParamSetGroup._syncTarget;

            //_keyControlParamName = srcParamSetGroup._keyControlParamName;
            _keyControlParamID = srcParamSetGroup._keyControlParamID;
            _keyControlParam   = null;          //<<이건 링크로 해결하자

            //애니메이션 값도 넣어주자
            _keyAnimClipID          = srcParamSetGroup._keyAnimClipID;
            _keyAnimTimelineID      = srcParamSetGroup._keyAnimTimelineID;
            _keyAnimTimelineLayerID = srcParamSetGroup._keyAnimTimelineLayerID;
            _keyAnimClip            = null;
            _keyAnimTimeline        = null;
            _keyAnimTimelineLayer   = null;

            _paramSetList.Clear();

            for (int i = 0; i < srcParamSetGroup._paramSetList.Count; i++)
            {
                apModifierParamSet srcParamSet = srcParamSetGroup._paramSetList[i];

                apOptParamSet optParamSet = new apOptParamSet();
                optParamSet.LinkParamSetGroup(this, portrait);
                optParamSet.BakeModifierParamSet(srcParamSet, portrait);


                _paramSetList.Add(optParamSet);
            }

            _isEnabled   = srcParamSetGroup._isEnabled;
            _layerIndex  = srcParamSetGroup._layerIndex;
            _layerWeight = srcParamSetGroup._layerWeight;
            _blendMethod = srcParamSetGroup._blendMethod;

            _isColorPropertyEnabled = srcParamSetGroup._isColorPropertyEnabled;            //<<추가.

            _calculatedWeightedVertexList.Clear();

            for (int i = 0; i < srcParamSetGroup._calculatedWeightedVertexList.Count; i++)
            {
                apModifierParamSetGroupVertWeight srcWV = srcParamSetGroup._calculatedWeightedVertexList[i];

                apOptParamSetGroupVertWeight optWV = new apOptParamSetGroupVertWeight();
                optWV.Bake(srcWV);

                optWV.Link(portrait.GetOptTransform(optWV._meshTransform_ID));                //OptTransform을 연결한다.

                _calculatedWeightedVertexList.Add(optWV);
            }

            LinkPortrait(portrait, parentModifier);
        }
Example #2
0
        // Functions
        //--------------------------------------------
        /// <summary>
        /// Animation인 경우 실행 순서와 Weight가 실시간으로 바뀐다.
        /// Weight는 상관없지만 재생 순서가 바뀐 경우 Sort를 다시 해야한다.
        /// Sort가 필요한 경우 True를 리턴한다.
        /// </summary>
        /// <returns></returns>
        public bool UpdateAnimLayer()
        {
            if (!IsAnimEnabled)
            {
                //애니메이션이 아니거나 실행중이 아니다
                _layerWeight = 0.0f;
                if (_layerIndex != -10)
                {
                    _layerIndex = -10;
                    return(true);
                }
                return(false);
            }

            //TODO : Mecanim일때는 어떻게 할까..

            //PlayUnit의 Weight를 가져온다.
            _layerWeight = Mathf.Clamp01(_keyAnimClip._parentPlayUnit.UnitWeight);

            switch (_keyAnimClip._parentPlayUnit.BlendMethod)
            {
            case apAnimPlayUnit.BLEND_METHOD.Interpolation:
                _blendMethod = apModifierParamSetGroup.BLEND_METHOD.Interpolation;
                break;

            case apAnimPlayUnit.BLEND_METHOD.Additive:
                _blendMethod = apModifierParamSetGroup.BLEND_METHOD.Additive;
                break;
            }

            //기존 : PlayOrder = 0일때 LayerWeight는 1
            //변경 : 0이 아닐수도 있다.
            //if(_keyAnimClip._parentPlayUnit._playOrder == 0)
            //{
            //	_layerWeight = 1.0f;
            //}

            if (_layerIndex != _keyAnimClip._parentPlayUnit._playOrder)
            {
                _layerIndex = _keyAnimClip._parentPlayUnit._playOrder;


                return(true);               //<Sort가 필요하다.
            }

            return(false);
        }
Example #3
0
        //2) Layer_ParamSetGroup
        public void CalculateParamSetGroup(float layerWeight,
                                           int iLayer,
                                           apModifierParamSetGroup.BLEND_METHOD blendType,
                                           apModifierParamSetGroupVertWeight paramSetGroupVertWeight,
                                           apCalculatedLog calPraramResultLog
                                           )
        {
            _weight = layerWeight;
            _paramSetGroupLayerIndex = iLayer;
            switch (blendType)
            {
            case apModifierParamSetGroup.BLEND_METHOD.Additive:
                _layerBlendType = BLEND_METHOD.Additive;
                break;

            case apModifierParamSetGroup.BLEND_METHOD.Interpolation:
                _layerBlendType = BLEND_METHOD.Interpolation;
                break;
            }
            //_paramSetGroupBlendType = blendType;
            _paramSetGroupVertWeight = paramSetGroupVertWeight;            //<<보통은 Null
            LinkLog_ModLayerParent(calPraramResultLog);
        }
        public void Bake(apPortrait portrait, apOptModifierUnitBase parentModifier, apModifierParamSetGroup srcParamSetGroup, bool isAnimated, bool isUseModMeshSet)
        {
            _portrait       = portrait;
            _parentModifier = parentModifier;

            _syncTarget = srcParamSetGroup._syncTarget;

            //_keyControlParamName = srcParamSetGroup._keyControlParamName;
            _keyControlParamID = srcParamSetGroup._keyControlParamID;
            _keyControlParam   = null;          //<<이건 링크로 해결하자

            //애니메이션 값도 넣어주자
            _keyAnimClipID          = srcParamSetGroup._keyAnimClipID;
            _keyAnimTimelineID      = srcParamSetGroup._keyAnimTimelineID;
            _keyAnimTimelineLayerID = srcParamSetGroup._keyAnimTimelineLayerID;
            _keyAnimClip            = null;
            _keyAnimTimeline        = null;
            _keyAnimTimelineLayer   = null;

            _paramSetList.Clear();

            for (int i = 0; i < srcParamSetGroup._paramSetList.Count; i++)
            {
                apModifierParamSet srcParamSet = srcParamSetGroup._paramSetList[i];

                apOptParamSet optParamSet = new apOptParamSet();
                optParamSet.LinkParamSetGroup(this, portrait);
                optParamSet.BakeModifierParamSet(srcParamSet, portrait, isUseModMeshSet);


                _paramSetList.Add(optParamSet);
            }

            _isEnabled   = srcParamSetGroup._isEnabled;
            _layerIndex  = srcParamSetGroup._layerIndex;
            _layerWeight = srcParamSetGroup._layerWeight;
            if (!isAnimated)
            {
                _blendMethod = srcParamSetGroup._blendMethod;
            }
            else
            {
                _blendMethod = apModifierParamSetGroup.BLEND_METHOD.Additive;                //<<애니메이션에서는 Additive 강제
            }

            _isColorPropertyEnabled = srcParamSetGroup._isColorPropertyEnabled;            //<<추가.


            // 삭제 19.5.20 : _calculatedWeightedVertexList 변수 삭제
            //_calculatedWeightedVertexList.Clear();

            //for (int i = 0; i < srcParamSetGroup._calculatedWeightedVertexList.Count; i++)
            //{
            //	apModifierParamSetGroupVertWeight srcWV = srcParamSetGroup._calculatedWeightedVertexList[i];

            //	apOptParamSetGroupVertWeight optWV = new apOptParamSetGroupVertWeight();
            //	optWV.Bake(srcWV);

            //	optWV.Link(portrait.GetOptTransform(optWV._meshTransform_ID));//OptTransform을 연결한다.

            //	_calculatedWeightedVertexList.Add(optWV);
            //}

            LinkPortrait(portrait, parentModifier);
        }