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

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

ただいまの
回答率

90.34%

  • Unity3D

    1432questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 486

HHHKKK

score 2

前提・実現したいこと

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

以下コードになります。

コード:SpriteRotater.cs
using UnityEngine;
using System.Collections;

public class SpriteRotater : MonoBehaviour {

    public bool isStartRotation = false;
    public bool isFinishRotation = false;


    [SerializeField]
    private float _time;


    private float _rotateY;

    [SerializeField]
    private float _rotateSpeedY;

    private float _testCount = 2.5f;

    public int _productionCount = 0;


    void Start() {
        _time = Time.deltaTime;
        _rotateY = _rotateSpeedY* _time;

    }

    void Update() {

        if (!MoveRotate()) return;
          }

  public bool MoveRotate() {

        //2回目から回転などが起こらない
    //ケースへの移動はできていることを確認しています
        switch (_productionCount)
        {


            case 0:

                if (isStartRotation) _productionCount += 1;

               return false;
            case 1:

                this.transform.Rotate(0, _rotateSpeedY, 0);
               if (this.transform.rotation.y <=-0.1&& this.transform.rotation.y >=-1) {

                    this.transform.rotation = Quaternion.Euler(0, 0, 0);
                   _productionCount += 1;
               }

                return false;

            case 2:
                isFinishRotation = true;

                return false;

            default:
                return false;
        }
    }

    public bool GetisStartRotation() {
        return isStartRotation;
    }

    public bool GetisFinishRotation() {
        return isFinishRotation;
    }
}
コード:SpriteController.cs

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;


public class SpriteController : MonoBehaviour {

    private SpriteRotater _wordS;
    private SpriteRotater _wordT;
    private SpriteRotater _wordA;
    private SpriteRotater _wordR;
    private SpriteRotater _wordLT;


    [SerializeField]
    public Vector3 _rotate;

    [SerializeField]
    public float _rotateTime;

    [SerializeField]
    private float _count;

    [SerializeField]
    private float _countDownTime;

    [SerializeField]
    private TITLEMODE _titleMode;

    [SerializeField]
    private float _rotateCount;

    void Start()
    {

        _rotateTime = Time.deltaTime;
        _titleMode = TITLEMODE.FIRST;
        _countDownTime = _count * 60 - _rotateTime;

       _wordS = GameObject.Find("S").GetComponent<SpriteRotater>();
       _wordT = GameObject.Find("T").GetComponent< SpriteRotater>();
       _wordA = GameObject.Find("A").GetComponent< SpriteRotater>();
       _wordR = GameObject.Find("R").GetComponent< SpriteRotater>();
       _wordLT = GameObject.Find("last_T").GetComponent< SpriteRotater>();

    }

    void Update()
    {



        StartAllProduction();
    }


    public void StartAllProduction() {
        if (!_wordS.GetisStartRotation()) {
            _wordS.isStartRotation = true;

        }
        if (_wordS.GetisFinishRotation()) {

            _wordT.isStartRotation = true;
            _wordS.isStartRotation = false; 
        }
        if (_wordT.GetisFinishRotation()) {
            _wordA.isStartRotation = true;
        }
        if (_wordA.GetisFinishRotation()) {
            _wordR.isStartRotation = true;
        }
        if (_wordR.GetisFinishRotation()) {
            _wordLT.isStartRotation = true;
        }
        if (_wordLT.GetisFinishRotation()) {
           _wordS.isFinishRotation = false;
            _wordS._productionCount = 0;
            _wordS.isStartRotation = true;
       }
    }

    void RotateSwitch() {
        _rotateCount += 1.0f;


    }
}

発生している問題

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

試したこと

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


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

みたいな

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Unity3D

    1432questions

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