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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

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

Unity

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

461閲覧

数値を比較しているが、数値が思った通りにならない

GOTOken

総合スコア54

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

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

Unity

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/07/15 10:05

編集2018/07/15 12:28

問題点

数値を比較し、そのコンボに達した時にcombo変数を+1するという処理を考えましたが、達した時に+7程されてしまいます。比較の仕方が間違っていたりしますか・・・?
また、これが原因なのか、switch文もcase1にのみ通っています。
実装したい動き

コンボの比較の処理を一回だけに済ませるようにしたい。
Switch文が、そこから通るようにしたい。

c#

1GameManager class 2 3 public Text ComboText; 4 public int ComboCounter; 5 public float deltaTime; 6 7 public static float delta; 8 public static int Combo; 9 10 // Update is called once per frame 11 void Update() 12 { 13 ComboCounter = Combo; 14 //if (Combo > 5) 15 //{ 16 ComboText.text = "Combo" + ComboCounter.ToString(); 17 //} 18 //コンボ取得時に計測時間計測開始 19 if (Combo > 1) 20 { 21 //計測時間設定 22 delta += Time.deltaTime; 23 } 24 //計測時間を代入 25 deltaTime = delta; 26 27 if(deltaTime > 3) 28 { 29 //計測時間経過後コンボ初期化 30 Combo = 0; 31 Debug.Log("0"); 32 33 } 34 35 Main(); 36 } 37

c#

1Player class 2 #region ComboShot 3 //combo初期化 4 if(GameManager.Combo == 0) 5 { 6 combo = 0; 7 } 8 //switch文に使用するための変換処理 9 if (GameManager.Combo == 50) 10 { 11 Debug.Log("1"); 12 combo += 1; 13 return; 14 } 15 if (GameManager.Combo == 100) 16 { 17 combo += 1; 18 return; 19 } 20 if (GameManager.Combo == 150) 21 { 22 combo += 1; 23 return; 24 } 25 switch (combo) 26 { 27 case 1: 28 Debug.Log("comboEX1"); 29 break; 30 case 2: 31 Debug.Log("comboEX2"); 32 33 break; 34 case 3: 35 Debug.Log("comboEX3"); 36 37 break; 38 } 39 40#endregion 41

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

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

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

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

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

guest

回答2

0

GameManager.Comboがどのように推移しているのかわからないので、何とも言えませんが
GameManager.Comboが50,100,150のときcomboがずっと+1され続けています。
それが原因で+7ほどされていると思います。

そしてif文内にreturn;がついていることで、GameManager.Comboが特定の値の時switch文を通らなくなっています。

その他に気になった部分として
・comboの初期化はStart関数に入れておくべきでは?
・if文が多いですが、if elseを使ったほうが万が一のエラーを減らせると思います。

投稿2018/07/15 11:46

TomoG12

総合スコア299

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

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

GOTOken

2018/07/15 12:10

回答ありがとうございます。 GameManagerクラスのint型変数ComboをPlayerクラスに渡し、数値を計測しようとしていました。今回の場合はそのComboを利用し、別の機能を作成しようとしていました。 なるほど、自分はすぐに上昇すると仮定し、設定していました。このような場合、制御する場合はどのようにするのがよいのでしょうか・・? returnが付いていると通らなくなるんですか・・・!知らなかったです。。一回だけ通すにはこのようにしたら良いかな。と思い、していました。 初期化というより、リセット。というイメージでした。コメントもあやふやで申し訳ございません。 わかりました!そこの修正もしたいとおもいます。
guest

0

Combo == 50の判定

if (GameManager.Combo == 50)

Debug.Log("1");

を入れているのですから、他のif文にも入れたら、どうでしょう。 ついでにその時の comboの値も含めて、、
--> Debug.Log("1" + ":" + combo.ToString()); // C#
--> Debug.Log("2" + ":" + combo.ToString()); // C#
..
こうすれば、動きがもう少し、分かり易くなると思います。

現在の情報ではこれくらいでしょうか。

投稿2018/07/15 12:00

pepperleaf

総合スコア6383

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

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

GOTOken

2018/07/15 12:25

なるほど。 現状の問題が、Debug.Logで確認したところ、Combo変数の数値がゲーム開始と同時にみるみると上がっていることが確認できました。 また、GameManagerクラスの方に、一定時間経つとGameManager.Comboを0にする。というものを実装してみましたが、0ではなく1になってしまっていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問