Example #1
0
        static public void BuildAnimationClip(XmlClip xmlClip)
        {
            AnimationClip clip = null;
            int           idx  = 0;

            UnityEngine.Object[] assetArr = null;
            XmlState             xmlState = null;
            AnimatorState        animatorState;

            //AnimationClip clip = AssetDatabase.LoadAssetAtPath(state.fullMotion, typeof(AnimationClip)) as AnimationClip;
            clip = null;
            idx  = 0;
            string preFixStr = "__preview__";

            assetArr = AssetDatabase.LoadAllAssetsAtPath(xmlClip.fullMotion);   // 一个 anim 就一个动画,但是一个 fbx 可能有多个动画,因此同一使用这个加载资源,否则只能加载第一个。在 fbx 中还会有一个奇怪的 Clip ,名字类似 "__preview___72_a_U1_M_P_PlantNTurn90_Run_R_Fb_p90_No_0_PJ_4",这个也要排除,排除 Clip 前缀是 "__preview__" 的 Clip 就行了
            for (idx = 0; idx < assetArr.Length; ++idx)
            {
                clip = assetArr[idx] as AnimationClip;
                if (clip != null)
                {
                    if (!clip.name.Contains(preFixStr))
                    {
                        xmlState               = xmlClip.getXmlStateByName(clip.name);
                        animatorState          = xmlClip.stateMachine.animatorStateMachine.AddState(clip.name);
                        xmlState.animatorState = animatorState;
                        animatorState.motion   = clip;
                        BuildState(xmlState);
                    }
                }
            }
        }
Example #2
0
        public void parseXml(XmlElement elem)
        {
            clear();

            m_name = ExportUtil.getXmlAttrStr(elem.Attributes["name"]);
            m_pos  = ExportUtil.getXmlAttrVector3(elem.Attributes["pos"]);

            // 解析没有动画文件的 State
            XmlNodeList noStateNodeList = elem.SelectNodes("State");
            XmlElement  stateElem       = null;
            XmlState    state           = null;

            foreach (XmlNode stateNode in noStateNodeList)
            {
                stateElem          = (XmlElement)stateNode;
                state              = new XmlState();
                state.stateMachine = this;
                m_noResStateList.Add(state);
                state.parseXml(stateElem);
            }

            // 解析有动画资源文件的 State
            XmlNodeList clipNodeList = elem.SelectNodes("Clip");
            XmlElement  clipElem     = null;
            XmlClip     _clip;

            foreach (XmlNode clipNode in clipNodeList)
            {
                clipElem           = (XmlElement)clipNode;
                _clip              = new XmlClip();
                _clip.stateMachine = this;
                m_clipList.Add(_clip);
                _clip.parseXml(clipElem);
            }

            // 解析状态机中的转换
            XmlNodeList        tranNodeList = elem.SelectNodes("StateTransition");
            XmlElement         tranElem     = null;
            XmlStateTransition _tran;

            foreach (XmlNode tranNode in tranNodeList)
            {
                tranElem           = (XmlElement)tranNode;
                _tran              = new XmlStateTransition();
                _tran.stateMachine = this;
                m_tranList.Add(_tran);
                _tran.parseXml(tranElem);
            }
        }
Example #3
0
        // 添加状态机之间的转换
        static public void BuildStateMachineTransition(XmlLayer xmlLayer)
        {
            XmlStateMachine xmlSrcStateMachine  = null;
            XmlStateMachine xmlDestStateMachine = null;
            XmlState        xmlDestState        = null;

            foreach (var stateMachineTransition in xmlLayer.xmlStateMachineTransitionList)
            {
                xmlSrcStateMachine  = xmlLayer.getXmlStateMachineByName(stateMachineTransition.srcStateMachineName);
                xmlDestStateMachine = xmlLayer.getXmlStateMachineByName(stateMachineTransition.destStateMachineName);
                xmlDestState        = xmlDestStateMachine.getXmlStateByName(stateMachineTransition.destStateName);

                stateMachineTransition.animatorTransition = xmlSrcStateMachine.animatorStateMachine.AddStateMachineTransition(xmlDestStateMachine.animatorStateMachine, xmlDestState.animatorState);
                //stateMachineTransition.animatorTransition = xmlDestStateMachine.animatorStateMachine.AddStateMachineTransition(xmlSrcStateMachine.animatorStateMachine, xmlDestState.animatorState);
            }
        }
Example #4
0
        static public void BuildState(XmlState xmlState)
        {
            AnimatorStateTransition trans = null;

            xmlState.animatorState.writeDefaultValues = false;
            trans                     = xmlState.stateMachine.animatorStateMachine.AddAnyStateTransition(xmlState.animatorState);
            trans.hasExitTime         = true;
            trans.exitTime            = 0;
            trans.duration            = 0;
            trans.canTransitionToSelf = false;

            foreach (XmlCondition xmlCond in xmlState.anyCondList)
            {
                trans.AddCondition(xmlCond.opMode, xmlCond.getFloatValue(), xmlCond.name);
            }
        }
Example #5
0
        // 这个是添加状态机内部状态的转换
        static public void BuildStateTransition(XmlStateMachine xmlStateMachine)
        {
            XmlState srcXmlState  = null;
            XmlState destXmlState = null;

            foreach (var tran in xmlStateMachine.tranList)
            {
                srcXmlState  = xmlStateMachine.getXmlStateByName(tran.srcStateName);
                destXmlState = xmlStateMachine.getXmlStateByName(tran.destStateName);
                //tran.animatorTransition = xmlStateMachine.animatorStateMachine.AddStateMachineTransition(xmlStateMachine.animatorStateMachine, destXmlState.animatorState);
                tran.animatorStateTransition = srcXmlState.animatorState.AddTransition(destXmlState.animatorState);

                foreach (var xmlCond in tran.condList)
                {
                    tran.animatorStateTransition.AddCondition(xmlCond.opMode, xmlCond.getFloatValue(), xmlCond.name);
                }
            }
        }
Example #6
0
        public void parseXml(XmlElement elem)
        {
            clear();

            m_name = ExportUtil.getXmlAttrStr(elem.Attributes["name"]);
            m_fullMotion = string.Format("{0}/{1}", m_stateMachine.layer.xmlLayers.xmlAnimatorController.inPath, m_name);

            XmlNodeList stateNodeList = elem.SelectNodes("State");
            XmlElement stateElem = null;
            XmlState state;
            foreach (XmlNode stateNode in stateNodeList)
            {
                stateElem = (XmlElement)stateNode;
                state = new XmlState();
                state.stateMachine = m_stateMachine;
                m_stateList.Add(state);
                m_stateMachine.stateList.Add(state);
                state.parseXml(stateElem);
            }
        }
Example #7
0
        public void parseXml(XmlElement elem)
        {
            clear();

            m_name       = ExportUtil.getXmlAttrStr(elem.Attributes["name"]);
            m_fullMotion = string.Format("{0}/{1}", m_stateMachine.layer.xmlLayers.xmlAnimatorController.inPath, m_name);

            XmlNodeList stateNodeList = elem.SelectNodes("State");
            XmlElement  stateElem     = null;
            XmlState    state;

            foreach (XmlNode stateNode in stateNodeList)
            {
                stateElem          = (XmlElement)stateNode;
                state              = new XmlState();
                state.stateMachine = m_stateMachine;
                m_stateList.Add(state);
                m_stateMachine.stateList.Add(state);
                state.parseXml(stateElem);
            }
        }
Example #8
0
        public void parseXml(XmlElement elem)
        {
            clear();

            m_name = ExportUtil.getXmlAttrStr(elem.Attributes["name"]);
            m_pos = ExportUtil.getXmlAttrVector3(elem.Attributes["pos"]);

            // 解析没有动画文件的 State
            XmlNodeList noStateNodeList = elem.SelectNodes("State");
            XmlElement stateElem = null;
            XmlState state = null;
            foreach (XmlNode stateNode in noStateNodeList)
            {
                stateElem = (XmlElement)stateNode;
                state = new XmlState();
                state.stateMachine = this;
                m_noResStateList.Add(state);
                state.parseXml(stateElem);
            }

            // 解析有动画资源文件的 State
            XmlNodeList clipNodeList = elem.SelectNodes("Clip");
            XmlElement clipElem = null;
            XmlClip _clip;
            foreach (XmlNode clipNode in clipNodeList)
            {
                clipElem = (XmlElement)clipNode;
                _clip = new XmlClip();
                _clip.stateMachine = this;
                m_clipList.Add(_clip);
                _clip.parseXml(clipElem);
            }

            // 解析状态机中的转换
            XmlNodeList tranNodeList = elem.SelectNodes("StateTransition");
            XmlElement tranElem = null;
            XmlStateTransition _tran;
            foreach (XmlNode tranNode in tranNodeList)
            {
                tranElem = (XmlElement)tranNode;
                _tran = new XmlStateTransition();
                _tran.stateMachine = this;
                m_tranList.Add(_tran);
                _tran.parseXml(tranElem);
            }
        }
Example #9
0
 static public void BuildNoResState(XmlState xmlState)
 {
     // 添加一个默认的状态,当没有所有的状态的时候,可以循环播放这个状态
     xmlState.animatorState = xmlState.stateMachine.animatorStateMachine.AddState(xmlState.motion);
     BuildState(xmlState);
 }