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

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

ただいまの
回答率

88.32%

Unity C# クリックの順番で処理をしたい。

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,712

kanatan1231

score 18

 前提・実現したいこと

Unityで順番にオブジェクトをクリックしたら、処理を行いたいです。

そろばんの正解の珠を順番にクリックして、正解判定を出したいのですが、
うまくいきません。

ソースコード

ソースコードはこちらです。

// 正解の球をクリックならコレクト
if(obj.name.Contains("Ichi"))
{
if (obj.name.Contains("Ni"))
{
Correct(gameObject);
}
}

これだと、IchiとNiをオブジェクトが名前に含んでいたら、正解にするということになってしまいます。
IchiNiをクリックした→正解(になってしまう)

Ichiをクリックした→Niをクリックした→正解
にしたいです。

色々試しましたが、結局できませんでした。

一度順番にクリックするのはできたのですが、
Ichi→Ni→正解でも
Ni→Ichi→正解でも反応してしまいました。
必ずIchi→Ni→正解の順番にしたいです。

 補足情報

https://qiita.com/norioc/items/e6b86f9d3031a5b65397
こちらのサイトのソースコードはそろばんで使う際よくわかりませんでした。
こちらのサイトのソースコードも解説していただけると助かります。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+1

これだと、IchiとNiをオブジェクトが名前に含んでいたら、正解にするということになってしまいます。
IchiNiをクリックした→正解(になってしまう)

名前に特定の文字列を含んでいたらという条件式はよろしくないです。
まずはTag判別かオブジェクト毎に判別する為のIDを割り振る様に変更した方が良いです。

Ichiをクリックした→Niをクリックした→正解
にしたいです。
色々試しましたが、結局できませんでした。
一度順番にクリックするのはできたのですが、
Ichi→Ni→正解でも
Ni→Ichi→正解でも反応してしまいました。
必ずIchi→Ni→正解の順番にしたいです。

bool ichi;の様にフラグとなる変数を用意しておきIchiをクリックした条件式内でこれをichi = true;して下さい。
そしてNiの条件式にこのフラグも含めればIchi→Ni→正解の順番処理は可能になります。

こちらのサイトのソースコードも解説していただけると助かります。

ボタンを押す毎にbuttonに対応した引数を渡してswitch文に移行し下記が実行されます。

正解:stepとbuttonが共に正ならばstepを1増やして処理を終えます。
不正解:stepとbuttonが共に正で無いならばswitch文以下でボタンを最初の状態に戻して処理を終えます。

そのサイトでも解説されているのでそれ以上噛み砕くというのは中々難しいですね。
UniRxは記述方式が少し特殊なのでそういうものだと思って覚えていくしかないです。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/02 09:52

    ご回答いただき誠にありがとうございます。
    承知致しました。試してみます。
    UniRxについてもわかりやすく解説していただきありがとうございます。
    勉強になります。

    キャンセル

+1

一度順番にクリックするのはできたのですが、
Ichi→Ni→正解でも
Ni→Ichi→正解でも反応してしまいました。
必ずIchi→Ni→正解の順番にしたいです。

この時点のコードを開示できれば、おそらく有用な指摘が得られると思います。
コード不明状態での推測ですが、2つのフラグで判定したんじゃないかと思います。判定がどうやって行われるかということにもよりますが、それらフラグに順序性を持つしかないです(例えば、配列に入れるとか)。

こちらのサイトのソースコードも解説

解説はコードの後に書いてありますし、コード自身それほど複雑ではないです。UniRxを使ってはいますが結局のところ上に書いたようにシーケンスの0番、1番、2番がそれぞれ想定した正解かどうかを判定している(Whereのところ)ことになります。
UniRxというかリアクティブの考え方が分からない状態で、ここだけ取り入れるというのは無理があるのではないかと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/02 09:50

    回答いただきまことにありがとうございます。
    一度順番にクリックするのはできたのですが、
    「Ichi→Ni→正解でも
    Ni→Ichi→正解でも反応してしまいました。
    必ずIchi→Ni→正解の順番にしたいです。」
    この時点のプログラムをすぐ書き換えてしまったため、忘れてしまいました泣
    フラグで順序性ですね、承知致しました。

    確かにUniRxの考え方が理解できない状態なので、取り入れるのはやめることにします。
    勉強になりました、回答ありがとうございました。

    キャンセル

  • 2018/11/02 10:25

    取り急ぎgitを覚えることをすすめます

    キャンセル

  • 2018/11/02 16:03

    承知しました。ありがとうございます。

    キャンセル

+1

とりあえずUnity関係なく思いついたのが
1.クリックされたら、name(tagでも)を回答用の変数へカンマ区切りで追加していく
Ans = Ans + "," + obj.name
といった感じで(Ichi→Niと押されたら",Ichi,Ni"となる)
2.正解か判断する時にその文字列と同じか判断する
if(Ans == ",Ichi,Ni")

これなら、順序も簡単にチェックできそうですがどうでしょう?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/02 14:47

    ありがとうございます!簡単に実装できそうですね!
    今回、bool変数を使用して実装できましたので、別の機会で使用します。
    ご回答いただき誠にありがとうございました!

    キャンセル

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

  • ただいまの回答率 88.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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