やりたいこと
オブジェクトを円運動と四角の動きを交互に行いたい。
(追記:xz軸平面での移動です。)
円運動のはじめの位置にコライダー(tag:move)を用意している。
このタグにぶつかると円運動から四角形の動きに変更したい。
分からないこと
現在コードを下記のようにしているが、Updateへ書いていないためか実行されない。
しかしUpdateでif文を使用し分岐を試みたが、実行されなかった。
もし簡単に分岐をする方法があれば、ご助言頂きたいです。
C#
1 void OnTriggerEnter(Collider other) 2 { 3 4 //接触したオブジェクトのタグが"move"のとき 5 if (other.CompareTag("move")) 6 { 7 if (count == 1) 8 { 9 tyoho(); 10 count = 0; 11 } 12 else if (count == 0) 13 { 14 Circle(); 15 count = 1; 16 } 17 } 18 } 19 public void Circle()//円運動 20 { 21 x = radius * Mathf.Sin(Time.time * speed); 22 y = yPosition; 23 z = radius * Mathf.Cos(Time.time * speed); 24 25 transform.position = new Vector3(-x, y, -z); 26 count = 1; 27 } 28 29 public void tyoho()//長方形の動き 30 { 31 while (true) 32 { 33 if (count_tyoho == 0) 34 { 35 // transformを取得 36 Transform myTransform = this.transform; 37 // ワールド座標を基準に、座標を取得 38 Vector3 worldPos = myTransform.position; 39 worldPos.x = -2.0f; // ワールド座標を基準にした、x座標を-2に変更 40 worldPos.y = 0.0f; // ワールド座標を基準にした、y座標を0に変更 41 worldPos.z = 2.0f; // ワールド座標を基準にした、z座標を2に変更 42 myTransform.position = worldPos; // ワールド座標での座標を設定 43 count_tyoho = 1; 44 continue; 45 } 46 else if (count_tyoho == 1) 47 { 48 // transformを取得 49 Transform myTransform = this.transform; 50 // ワールド座標を基準に、座標を取得 51 Vector3 worldPos = myTransform.position; 52 worldPos.x = -2.0f; // ワールド座標を基準にした、x座標を1に変更 53 worldPos.y = 0.0f; // ワールド座標を基準にした、y座標を1に変更 54 worldPos.z = -1.0f; // ワールド座標を基準にした、z座標を1に変更 55 myTransform.position = worldPos; // ワールド座標での座標を設定 56 count_tyoho = 2; 57 continue; 58 } 59 else if (count_tyoho == 2) 60 { 61 // transformを取得 62 Transform myTransform = this.transform; 63 // ワールド座標を基準に、座標を取得 64 Vector3 worldPos = myTransform.position; 65 worldPos.x = 2.0f; // ワールド座標を基準にした、x座標を2に変更 66 worldPos.y = 0.0f; // ワールド座標を基準にした、y座標を0に変更 67 worldPos.z = -1.0f; // ワールド座標を基準にした、z座標を-1に変更 68 myTransform.position = worldPos; // ワールド座標での座標を設定 69 count_tyoho = 3; 70 continue; 71 } 72 else if (count_tyoho == 3) 73 { 74 // transformを取得 75 Transform myTransform = this.transform; 76 // ワールド座標を基準に、座標を取得 77 Vector3 worldPos = myTransform.position; 78 worldPos.x = 2.0f; // ワールド座標を基準にした、x座標を2に変更 79 worldPos.y = 0.0f; // ワールド座標を基準にした、y座標を0に変更 80 worldPos.z = -2.0f; // ワールド座標を基準にした、z座標を-2に変更 81 myTransform.position = worldPos; // ワールド座標での座標を設定 82 count_tyoho = 4; 83 continue; 84 } 85 else if (count_tyoho == 4) 86 { 87 // transformを取得 88 Transform myTransform = this.transform; 89 // ワールド座標を基準に、座標を取得 90 Vector3 worldPos = myTransform.position; 91 worldPos.x = 0.0f; // ワールド座標を基準にした、x座標を0に変更 92 worldPos.y = 0.0f; // ワールド座標を基準にした、y座標を0に変更 93 worldPos.z = -2.0f; // ワールド座標を基準にした、z座標を-2に変更 94 myTransform.position = worldPos; // ワールド座標での座標を設定 95 count_tyoho = 0; 96 break; 97 } 98 99 } 100 }
試したこと
Update内で円運動を行ってみた。
C#
1 void Update() 2 { 3 4 x = radius * Mathf.Sin(Time.time * speed); 5 y = yPosition; 6 z = radius * Mathf.Cos(Time.time * speed); 7 8 transform.position = new Vector3(-x, y, -z); 9 10 } 11
Time.timeはフレーム毎に増加するのでUpdate内でしか、実行できないのかもしれない。
参考にしたサイト
円運動に関するサイト
https://uni.gas.mixh.jp/unity/circle.html
Time.timeのカンファレンス
https://docs.unity3d.com/ScriptReference/Time-time.html
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/01 04:30
2020/12/01 04:50 編集
2020/12/01 05:12