Пример #1
0
    private void Awake()
    {
        tracker = Camera.main.GetComponentInParent <TransformTracker>();

        //sort level rewards in increasing order of frame thresholds
        levelRewards.Sort((x, y) => x.TimeThreshold.CompareTo(y.TimeThreshold));
    }
Пример #2
0
        /// <summary>
        /// Basic awake routine
        /// </summary>
        protected virtual void Awake()
        {
            //Create a unique id for the scene object (only valid in the current session -> otherwise UUID required)
            string id = UnitySceneAccess.CreateSceneObjectID();


            //To check -> Is this informaton be required for every use case? Or should be remove it from here.
            Dictionary <string, string> _dict = new Dictionary <string, string>();

            if (Type == Types.Part)
            {
                _dict.Add("type", Type.ToString());
                if (InitialLocation != null)
                {
                    _dict.Add("initialLocation", InitialLocation.MSceneObject.ID);
                }
                if (FinalLocation != null)
                {
                    _dict.Add("finalLocation", FinalLocation.MSceneObject.ID);
                }
                if (IsLocatedAt != null)
                {
                    _dict.Add("isLocatedAt", InitialLocation.MSceneObject.ID);
                }
            }
            else if (Type == Types.Tool)
            {
                _dict.Add("type", Tool);
                if (InitialLocation != null)
                {
                    _dict.Add("initialLocation", InitialLocation.MSceneObject.ID);
                }
                if (FinalLocation != null)
                {
                    _dict.Add("finalLocation", FinalLocation.MSceneObject.ID);
                }
                if (IsLocatedAt != null)
                {
                    _dict.Add("isLocatedAt", InitialLocation.MSceneObject.ID);
                }
            }
            else
            {
                _dict.Add("type", Type.ToString());
            }

            //Create a new instance
            this.MSceneObject = new MSceneObject()
            {
                Name        = this.name,
                ID          = id,
                Properties  = _dict,
                Transform   = new MTransform(id, new MVector3(0, 0, 0), new MQuaternion(0, 0, 0, 1)),
                Constraints = this.Constraints
            };

            //Create a new transform tracker
            this.transformTracker = new TransformTracker(this.MSceneObject);
        }
Пример #3
0
    public MayaNodeDataContainer(Transform inputObj, string namePath, string inputPath, bool recordT, bool recordR, bool recordS)
    {
        objNodeName    = namePath;
        saveFileName   = objNodeName.Replace('/', '-');
        observeObj     = inputObj;
        fileFolderPath = inputPath;

        recordTranslation = recordT;
        recordRotation    = recordR;
        recordScale       = recordS;

        // setup tracker
        tracker = new TransformTracker(inputObj, recordT, recordR, recordS);
    }
Пример #4
0
    void SetupRecordItems()
    {
        // get all record objs
        observeTargets = gameObject.GetComponentsInChildren <Transform> ();
        trackers       = new TransformTracker[observeTargets.Length];

        objNums = trackers.Length;

        for (int i = 0; i < objNums; i++)
        {
            string namePath = observeTargets [i].name;

            // if there are some nodes with same names, include path
            if (includePathName)
            {
                namePath = AnimationRecorderHelper.GetTransformPathName(transform, observeTargets [i]);
                Debug.Log("get name: " + namePath);
            }
            trackers [i] = new TransformTracker(observeTargets [i], recordPos, recordRot, recordScale);
        }
        Debug.Log("setting complete");
    }
Пример #5
0
    IEnumerator ExportToFile()
    {
        Debug.Log("copy file ...");

        // copy Data into New Data, and clear preRotations
        StreamWriter writer = new StreamWriter(exportFilePath);
        StreamReader reader = new StreamReader(sourceFilePath);

        while (reader.Peek() != -1)
        {
            string strLine = reader.ReadLine();

            // find prerotation
            if (strLine.IndexOf("PreRotation") != -1)
            {
                // find tabs before
                int    tabNum = strLine.IndexOf("P:") + 1;
                string tabStr = "";

                for (int i = 0; i < tabNum; i++)
                {
                    tabStr += "\t";
                }

                // just simply replace whole line, since every attribute looks the same
                writer.WriteLine(tabStr + "P: \"PreRotation\", \"Vector3D\", \"Vector\", \"\",0,0,0");
            }
            else
            {
                writer.WriteLine(strLine);
            }
        }
        writer.Close();
        reader.Close();

        yield return(null);



        Debug.Log("fetch nodes ...");


        FbxDataNode[] allNodes     = FbxDataNode.FetchNodes(File.ReadAllText(exportFilePath), 0);
        int           objNodeIndex = 0;

        for (int i = 0; i < allNodes.Length; i++)
        {
            if (allNodes [i].nodeName == "Objects")
            {
                objNodeIndex = i;
            }
        }

        yield return(null);

        // setup converter
        fbxObj  = new FbxObjectsManager(allNodes[objNodeIndex], exportFileFolder);
        fbxConn = new FbxConnectionsManager(File.ReadAllText(exportFilePath));

        string animBaseLayerId = fbxConn.getAnimBaseLayerId();


        Debug.Log("Generating Nodes ...");

        // add anim nodes
        for (int i = 0; i < observeTargets.Length; i++)
        {
            // dont record self
            if (observeTargets [i] == transform)
            {
                continue;
            }

            TransformTracker objTracker = trackers [i];

            // get needed ids
            string objName = observeTargets [i].name;
            string objId   = fbxConn.searchObjectId(objName);

            string animCurveNodeT_id = getNewId();
            string animCurveNodeR_id = getNewId();
            string animCurveNodeS_id = getNewId();

            string curveT_X_id = getNewId();
            string curveT_Y_id = getNewId();
            string curveT_Z_id = getNewId();

            string curveR_X_id = getNewId();
            string curveR_Y_id = getNewId();
            string curveR_Z_id = getNewId();

            string curveS_X_id = getNewId();
            string curveS_Y_id = getNewId();
            string curveS_Z_id = getNewId();


            Debug.Log("Generating Node [" + objName + "]");

            /*
             * Create Objs
             */

            // create Animation Curve Nodes
            fbxObj.AddAnimationCurveNode(animCurveNodeT_id, FbxAnimationCurveNodeType.Translation, ExportHelper.UnityToMayaPosition(observeTargets [i].localPosition));
            fbxObj.AddAnimationCurveNode(animCurveNodeR_id, FbxAnimationCurveNodeType.Rotation, ExportHelper.UnityToMayaRotation(observeTargets [i].localRotation));
            fbxObj.AddAnimationCurveNode(animCurveNodeS_id, FbxAnimationCurveNodeType.Scale, observeTargets [i].localScale);

            float[] xData     = new float[objTracker.posDataList.Count];
            float[] yData     = new float[objTracker.posDataList.Count];
            float[] zData     = new float[objTracker.posDataList.Count];
            int     dataCount = objTracker.posDataList.Count;

            // create Curves
            // put in pos data
            for (int dataI = 0; dataI < dataCount; dataI++)
            {
                Vector3 mayaPos = ExportHelper.UnityToMayaPosition(objTracker.posDataList [dataI]);
                xData [dataI] = mayaPos.x;
                yData [dataI] = mayaPos.y;
                zData [dataI] = mayaPos.z;
            }
            fbxObj.AddAnimationCurve(curveT_X_id, xData);
            fbxObj.AddAnimationCurve(curveT_Y_id, yData);
            fbxObj.AddAnimationCurve(curveT_Z_id, zData);

            // put in rot data
            for (int dataI = 0; dataI < dataCount; dataI++)
            {
                Vector3 mayaRot = ExportHelper.UnityToMayaRotation(objTracker.rotDataList [dataI]);
                xData [dataI] = mayaRot.x;
                yData [dataI] = mayaRot.y;
                zData [dataI] = mayaRot.z;
            }
            fbxObj.AddAnimationCurve(curveR_X_id, xData);
            fbxObj.AddAnimationCurve(curveR_Y_id, yData);
            fbxObj.AddAnimationCurve(curveR_Z_id, zData);

            // put in scale data
            for (int dataI = 0; dataI < dataCount; dataI++)
            {
                xData [dataI] = objTracker.scaleDataList [dataI].x;
                yData [dataI] = objTracker.scaleDataList [dataI].y;
                zData [dataI] = objTracker.scaleDataList [dataI].z;
            }
            fbxObj.AddAnimationCurve(curveS_X_id, xData);
            fbxObj.AddAnimationCurve(curveS_Y_id, yData);
            fbxObj.AddAnimationCurve(curveS_Z_id, zData);



            // setup connections
            fbxConn.AddConnectionItem("AnimCurveNode", "T", animCurveNodeT_id, "Model", objName, objId, "OP", "Lcl Translation");
            fbxConn.AddConnectionItem("AnimCurveNode", "R", animCurveNodeR_id, "Model", objName, objId, "OP", "Lcl Rotation");
            fbxConn.AddConnectionItem("AnimCurveNode", "S", animCurveNodeS_id, "Model", objName, objId, "OP", "Lcl Scaling");

            fbxConn.AddConnectionItem("AnimCurveNode", "T", animCurveNodeT_id, "AnimLayer", "BaseLayer", animBaseLayerId, "OO", "");
            fbxConn.AddConnectionItem("AnimCurveNode", "R", animCurveNodeR_id, "AnimLayer", "BaseLayer", animBaseLayerId, "OO", "");
            fbxConn.AddConnectionItem("AnimCurveNode", "S", animCurveNodeS_id, "AnimLayer", "BaseLayer", animBaseLayerId, "OO", "");

            fbxConn.AddConnectionItem("AnimCurve", "", curveT_X_id, "AnimCurveNode", "T", animCurveNodeT_id, "OP", "d|X");
            fbxConn.AddConnectionItem("AnimCurve", "", curveT_Y_id, "AnimCurveNode", "T", animCurveNodeT_id, "OP", "d|Y");
            fbxConn.AddConnectionItem("AnimCurve", "", curveT_Z_id, "AnimCurveNode", "T", animCurveNodeT_id, "OP", "d|Z");

            fbxConn.AddConnectionItem("AnimCurve", "", curveR_X_id, "AnimCurveNode", "R", animCurveNodeR_id, "OP", "d|X");
            fbxConn.AddConnectionItem("AnimCurve", "", curveR_Y_id, "AnimCurveNode", "R", animCurveNodeR_id, "OP", "d|Y");
            fbxConn.AddConnectionItem("AnimCurve", "", curveR_Z_id, "AnimCurveNode", "R", animCurveNodeR_id, "OP", "d|Z");

            fbxConn.AddConnectionItem("AnimCurve", "", curveS_X_id, "AnimCurveNode", "S", animCurveNodeS_id, "OP", "d|X");
            fbxConn.AddConnectionItem("AnimCurve", "", curveS_Y_id, "AnimCurveNode", "S", animCurveNodeS_id, "OP", "d|Y");
            fbxConn.AddConnectionItem("AnimCurve", "", curveS_Z_id, "AnimCurveNode", "S", animCurveNodeS_id, "OP", "d|Z");

            yield return(null);
        }

        Debug.Log("Edit Defitions");
        ModifyDefinitions(exportFilePath);
        yield return(null);


        Debug.Log("Edit Objects Data");

        // apply edition to file
        fbxObj.EditTargetFile(exportFilePath);
        yield return(null);

        Debug.Log("Edit Connections Data");

        fbxConn.EditTargetFile(exportFilePath);
        yield return(null);


        // clear data
        fbxObj.objMainNode.clearSavedData();

        Debug.Log("End Exporting");
    }
Пример #6
0
 private void Awake()
 {
     tracker = Camera.main.GetComponentInParent <TransformTracker>();
 }