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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

5回答

6989閲覧

switch文の繰り返し処理方法

TKM_waiwai

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/11/11 01:11

編集2016/11/11 01:13

Unityでの制作で、switch文を使う場面があるのですがcase1を実行したらそのままcase2を実行するようにしたいです。
case2が実行されたらまたcase1に戻りそのまま交互を繰り返すをいった形にするにはどうしたら良いでしょうか。
下記のは、現段階のswitch文辺りのソースです。

かなりの初心者ですみません。

C#

1public void Move() 2{ 3int i = 1; 4 5switch(i) 6{ 7case 1: 8 //キャラが動くための処理 9 Debug.Log("動いた"); 10 break; 11 12case 2: 13 Debug.Log("待機"); 14 break; 15 16default: 17 Debug.Log("例外エラー"); 18 break; 19} 20}

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

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

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

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

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

guest

回答5

0

ベストアンサー

多分、キャラの状態遷移を作りたいということだと思うのでその方向で回答します。
Unity Stateパターンで状態管理の実装
上記URLのコード部分はひとまず読み飛ばして、下の方にある動画を見てみてください。
やりたい事がこんな感じで、コードを読んで自分でも書けそうと思ったら、
そのまま上記のURLを参考に作ってみてください。
Stateパターン使って書けるならその方がいいです。

ただ、やっぱりStateパターンは初心者のうちはちょっと難易度が高いかと思います。
一応、Stateパターンを使わないで簡単にキャラの状態を管理するやり方も紹介します。
下記のコードはMoveを呼び出す度に移動←→待機に切り替わります。

C#

1int state = 0; //状態を保持しておくメンバ変数を作っておく 2public void Move() 3{ 4switch(state) 5{ 6case 1: 7 //キャラが動くための処理 8 Debug.Log("動いた"); 9 state = 2; // 次にMoveが実行される時は待機になる 10 break; 11 12case 2: 13 Debug.Log("待機"); 14 state = 1; // 次にMoveが実行される時は移動になる 15 break; 16 17default: 18 Debug.Log("例外エラー"); 19 break; 20}

追記:
すいません、参考URLのコード、よく見たらRx使ってますね。
RxはStateパターンとは全く関係ない(無くても全く問題ない)ですし、
さらに難易度が上がるだけなので、初心者の方には全く優しくない例でした。
ただ、普通に便利なので、いずれはRxを勉強してみるのもいいと思います。

投稿2016/11/11 02:18

編集2016/11/11 03:40
ishi9

総合スコア1294

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

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

TKM_waiwai

2016/11/14 01:20

親切にありがとうございました! 参考にさせてもらいます!
guest

0

おそらくゲーム制作だと思うので、case1「動いた」、そのままcase2「待機」にしたいというのは、
1ループ目:動いた、2ループ目:待機
になっているのが、望ましいのではないかと想定し、サンプルソースを記載しました。
しかし、以下の内容では、永久に、「動いた→待機→動いた→待機」を繰り返すだけで、
別の動きを入力する余地がありません。
別の動きを入力したいのであれば、
Move関数の上の階層で、無限ループを作成し、
入力→Move→入力→Moveを繰り返す案を考えた方がいいと思います。

C

1public void Move() 2{ 3 int i = 1; 4 5 //無限ループで問題ない? 6 while(){ 7 8 switch(i) 9 { 10 case 1: 11 //キャラが動くための処理 12 Debug.Log("動いた"); 13 i = 2; 14 break; 15 16 case 2: 17 Debug.Log("待機"); 18 i = 1; 19 break; 20 21 default: 22 Debug.Log("例外エラー"); 23 break; 24 } 25 } 26} 27

投稿2016/11/11 02:10

raindrop

総合スコア12

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

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

0

こうでしょうか これだとエラーが出ますが
public void Move()
{
int i = 1;

while(true){

switch(i)
{
case 1:
//キャラが動くための処理
Debug.Log("動いた");

case 2:
Debug.Log("待機");
if(i==2){
i=1;
}
break;

default:
Debug.Log("例外エラー");
break;
}

}

}

投稿2016/11/11 01:42

編集2016/11/11 01:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

breakをしなければいくはずです。

投稿2016/11/11 01:15

himakuma

総合スコア952

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

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

0

必ずcase1を実行したらそのままcase2を実行する
というだけならば、case1のbreakを消す&iの値を2にする
1に戻るというのは次のイベント(Move)で期待するべきだと考えます
どうしても繰り返したいというのであれば、switch文を捨てましょう。むいている関数ではありません

投稿2016/11/11 01:15

ardin

総合スコア544

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問