Exemple #1
0
        private void Awake()
        {
            //把持可能な物体を対象物体とする
            targetObjects = new List <GameObject>(GameObject.FindGameObjectsWithTag("Graspables"));

            foreach (GameObject targetObj in targetObjects)
            {
                //初期トランスフォームを設定
                this.SetInitialTransform(targetObj.transform);

                //道具
                if (targetObj.transform.parent.name == "CookingTools")
                {
                    this.targetTools.Add(targetObj);
                }
                //台
                if (targetObj.transform.parent.name == "CookingBases")
                {
                    this.targetBases.Add(targetObj);
                }
            }

            //左手の初期値
            foreach (Transform finger in this.leftHandTransform)
            {
                UpdatingTransformData initialTransform = new UpdatingTransformData();
                initialTransform.UpdatingTransform = transform;

                initialTransform.LocalPosition = transform.localPosition;
                initialTransform.LocalRotation = transform.localEulerAngles;
                initialTransform.LocalScale    = transform.localScale;

                this.initialLeftFingers.Add(initialTransform);
            }
            //右手の初期値
            foreach (Transform finger in this.rightHandTransform)
            {
                UpdatingTransformData initialTransform = new UpdatingTransformData();
                initialTransform.UpdatingTransform = transform;

                initialTransform.LocalPosition = transform.localPosition;
                initialTransform.LocalRotation = transform.localEulerAngles;
                initialTransform.LocalScale    = transform.localScale;

                this.initialRightFingers.Add(initialTransform);
            }
        }
Exemple #2
0
        //現在のトランスフォームを初期値に設定
        public void SetInitialTransform(Transform targetTransform)
        {
            Transform[] transforms = targetTransform.GetComponentsInChildren <Transform>();

            foreach (Transform transform in transforms)
            {
                UpdatingTransformData initialTransform = new UpdatingTransformData
                {
                    UpdatingTransform = transform,
                    LocalPosition     = transform.localPosition,
                    LocalRotation     = transform.localEulerAngles,
                    LocalScale        = transform.localScale
                };

                this.initialTransformMap[transform.name] = initialTransform;
            }
        }
Exemple #3
0
        //録画データの再生リストを作成
        private void CreatePlayingTransformList()
        {
            this.playingTransformList.Clear();
            List <Transform> transformOrder     = new List <Transform>();
            List <int>       ignoredPathIndexes = new List <int>();
            List <string>    targetNames        = new List <string>();

            for (int index = 0; index < this.motionData.Count; index++)
            {
                string[] columnArray = this.motionData[index].Split(new char[] { '\t' }, 2);
                if (columnArray.Length < 2)
                {
                    continue;
                }

                string headerStr = columnArray[0];
                string dataStr   = columnArray[1];

                string[]      headerArray = headerStr.Split(',');
                List <string> dataArray   = new List <string>(dataStr.Split('\t'));

                List <string> collidingArray = new List <string>(this.collidingData[index].Split('\t'));

                //最初の定義の行の場合
                if (int.Parse(headerArray[1]) == CookingSupportPlaybackCommon.TypeDefMotion)
                {
                    transformOrder.Clear();
                    ignoredPathIndexes.Clear();
                    targetNames.Clear();

                    for (int i = 0; i < dataArray.Count; i++)
                    {
                        string transformPath = dataArray[i];
                        if (transformPath.Contains("Avatar"))
                        {
                            //再生対象のアバタにパスを変更
                            string replacedPath = transformPath.Replace("Avatar", this.instructor.name);
                            transformOrder.Add(this.targetPathTransformMap[replacedPath]);
                        }
                        else if (this.targetPathTransformMap.ContainsKey(transformPath))
                        {
                            transformOrder.Add(this.targetPathTransformMap[transformPath]);
                        }
                        else
                        {
                            //存在しないパスのインデックスを保存
                            ignoredPathIndexes.Add(i);
                            Debug.Log("Couldn't find the object that path is " + transformPath);
                        }
                    }

                    targetNames = collidingArray;
                }
                //それ以外のデータの行の場合
                else if (int.Parse(headerArray[1]) == CookingSupportPlaybackCommon.TypeValMotion)
                {
                    if (transformOrder.Count == 0)
                    {
                        continue;
                    }

                    //経過時間を格納
                    UpdatingTransformTimeSeries timeSeriesMotionsData = new UpdatingTransformTimeSeries
                    {
                        elapsedTime = float.Parse(headerArray[0])
                    };

                    for (int i = dataArray.Count - 1; i >= 0; i--)
                    {
                        //存在しないパスのインデックスのデータを削除
                        if (ignoredPathIndexes.Contains(i))
                        {
                            dataArray.RemoveAt(i);
                        }
                    }

                    //動作データを格納
                    for (int i = 0; i < dataArray.Count; i++)
                    {
                        string[] transformValues = dataArray[i].Split(',');

                        UpdatingTransformData transformPlayer = new UpdatingTransformData();
                        transformPlayer.UpdatingTransform = transformOrder[i];

                        transformPlayer.LocalPosition = new Vector3(float.Parse(transformValues[0]), float.Parse(transformValues[1]), float.Parse(transformValues[2]));
                        transformPlayer.LocalRotation = new Vector3(float.Parse(transformValues[3]), float.Parse(transformValues[4]), float.Parse(transformValues[5]));

                        //スケールがある場合
                        if (transformValues.Length == 9)
                        {
                            transformPlayer.LocalScale = new Vector3(float.Parse(transformValues[6]), float.Parse(transformValues[7]), float.Parse(transformValues[8]));
                        }

                        //トランスフォームを追加
                        timeSeriesMotionsData.AddUpdatingTransformData(transformPlayer);
                    }

                    //把持物体の文字列を格納
                    timeSeriesMotionsData.AssignGraspedObjectsString(graspingData[index]);

                    //接触物体のマップを格納
                    for (int i = 0; i < collidingArray.Count; i++)
                    {
                        timeSeriesMotionsData.AddCollidingObjectsMap(targetNames[i], collidingArray[i]);
                    }

                    //再生リストに追加
                    this.playingTransformList.Add(timeSeriesMotionsData);
                }
            }
        }
Exemple #4
0
 public void AddUpdatingTransformData(UpdatingTransformData updatingTransformData)
 {
     this.updatingTransformList.Add(updatingTransformData);
 }