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); } }
//現在のトランスフォームを初期値に設定 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; } }
//録画データの再生リストを作成 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); } } }
public void AddUpdatingTransformData(UpdatingTransformData updatingTransformData) { this.updatingTransformList.Add(updatingTransformData); }