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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C#

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

Unity

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

Q&A

解決済

3回答

4349閲覧

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

kanatan1231

総合スコア18

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C#

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

Unity

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

0グッド

0クリップ

投稿2018/10/31 08:42

前提・実現したいこと

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
こちらのサイトのソースコードはそろばんで使う際よくわかりませんでした。
こちらのサイトのソースコードも解説していただけると助かります。

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

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

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

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

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

guest

回答3

0

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

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

投稿2018/11/02 01:54

YAmaGNZ

総合スコア10251

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

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

kanatan1231

2018/11/02 05:47

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

0

ベストアンサー

これだと、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/01 02:15

編集2018/11/01 04:57
Hawn

総合スコア1222

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

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

kanatan1231

2018/11/02 00:52

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

0

一度順番にクリックするのはできたのですが、

Ichi→Ni→正解でも
Ni→Ichi→正解でも反応してしまいました。
必ずIchi→Ni→正解の順番にしたいです。

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

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

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

投稿2018/10/31 14:32

papinianus

総合スコア12705

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

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

kanatan1231

2018/11/02 00:50

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

2018/11/02 01:25

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

2018/11/02 07:03

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問