質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

2回答

1621閲覧

switch文の中身の処理が1回目しかできません

HHHKKK

総合スコア6

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2017/02/16 20:14

###前提・実現したいこと
Unityにてswitch文を使用してスクリプトを書いており、2回目に該当のケースに
飛んだ際、ちゃんと処理を行うようにしたいと考えています。
(動揺にしてループさせたいと思っています。)

以下コードになります。

C#

1コード:SpriteRotater.cs 2using UnityEngine; 3using System.Collections; 4 5public class SpriteRotater : MonoBehaviour { 6 7 public bool isStartRotation = false; 8 public bool isFinishRotation = false; 9 10 11 [SerializeField] 12 private float _time; 13 14 15 private float _rotateY; 16 17 [SerializeField] 18 private float _rotateSpeedY; 19 20 private float _testCount = 2.5f; 21 22 public int _productionCount = 0; 23 24 25 void Start() { 26 _time = Time.deltaTime; 27 _rotateY = _rotateSpeedY* _time; 28 29 } 30 31 void Update() { 32 33 if (!MoveRotate()) return; 34 } 35 36 public bool MoveRotate() { 37 38 //2回目から回転などが起こらない 39 //ケースへの移動はできていることを確認しています 40 switch (_productionCount) 41 { 42 43 44 case 0: 45 46 if (isStartRotation) _productionCount += 1; 47 48 return false; 49 case 1: 50 51 this.transform.Rotate(0, _rotateSpeedY, 0); 52 if (this.transform.rotation.y <=-0.1&& this.transform.rotation.y >=-1) { 53 54 this.transform.rotation = Quaternion.Euler(0, 0, 0); 55 _productionCount += 1; 56 } 57 58 return false; 59 60 case 2: 61 isFinishRotation = true; 62 63 return false; 64 65 default: 66 return false; 67 } 68 } 69 70 public bool GetisStartRotation() { 71 return isStartRotation; 72 } 73 74 public bool GetisFinishRotation() { 75 return isFinishRotation; 76 } 77}

C#

1コード:SpriteController.cs 2 3using UnityEngine; 4using System.Collections; 5using UnityEngine.SceneManagement; 6 7 8public class SpriteController : MonoBehaviour { 9 10 private SpriteRotater _wordS; 11 private SpriteRotater _wordT; 12 private SpriteRotater _wordA; 13 private SpriteRotater _wordR; 14 private SpriteRotater _wordLT; 15 16 17 [SerializeField] 18 public Vector3 _rotate; 19 20 [SerializeField] 21 public float _rotateTime; 22 23 [SerializeField] 24 private float _count; 25 26 [SerializeField] 27 private float _countDownTime; 28 29 [SerializeField] 30 private TITLEMODE _titleMode; 31 32 [SerializeField] 33 private float _rotateCount; 34 35 void Start() 36 { 37 38 _rotateTime = Time.deltaTime; 39 _titleMode = TITLEMODE.FIRST; 40 _countDownTime = _count * 60 - _rotateTime; 41 42 _wordS = GameObject.Find("S").GetComponent<SpriteRotater>(); 43 _wordT = GameObject.Find("T").GetComponent< SpriteRotater>(); 44 _wordA = GameObject.Find("A").GetComponent< SpriteRotater>(); 45 _wordR = GameObject.Find("R").GetComponent< SpriteRotater>(); 46 _wordLT = GameObject.Find("last_T").GetComponent< SpriteRotater>(); 47 48 } 49 50 void Update() 51 { 52 53 54 55 StartAllProduction(); 56 } 57 58 59 public void StartAllProduction() { 60 if (!_wordS.GetisStartRotation()) { 61 _wordS.isStartRotation = true; 62 63 } 64 if (_wordS.GetisFinishRotation()) { 65 66 _wordT.isStartRotation = true; 67 _wordS.isStartRotation = false; 68 } 69 if (_wordT.GetisFinishRotation()) { 70 _wordA.isStartRotation = true; 71 } 72 if (_wordA.GetisFinishRotation()) { 73 _wordR.isStartRotation = true; 74 } 75 if (_wordR.GetisFinishRotation()) { 76 _wordLT.isStartRotation = true; 77 } 78 if (_wordLT.GetisFinishRotation()) { 79 _wordS.isFinishRotation = false; 80 _wordS._productionCount = 0; 81 _wordS.isStartRotation = true; 82 } 83 } 84 85 void RotateSwitch() { 86 _rotateCount += 1.0f; 87 88 89 } 90}

###発生している問題

実行時の1回目はif文の条件とswitch文の中身通り、順々にオブジェクトが回転するのですが、2回目に入ると回転しません。

###試したこと

switch文、if文の条件を変える。 Inspector側での数値の操作。

ご回答のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

switchの中身とif文中身の整合性がきちんとできていないのが原因でした。
一連の動作を分けて、さらに細かく何をすべきかわけることによってこんがらがっていたものを
解消することができました。
お時間割いていただき有難う御座いました。

投稿2017/02/16 22:06

HHHKKK

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

_productionCountのクリア忘れではないですか?
0のとき1にする。
1のとき2にする。
2のとき特になし。

みたいな

投稿2017/02/16 21:11

maiko0318

総合スコア876

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問