質問: 一つ目は、最初のスクリプトではなぜ元の色に戻らないか。 二つ目は、どのようにすればうまくいくか。 よろしくお願いします。
回答: ソースを見たところ、クリック時の動作が**クリックされたオブジェクトを赤色にする&自分のカウンターを100にする&フラグを立てる**となっています。 つまり、あるオブジェクトの被クリックに対し、全てのオブジェクトが一斉に反応しています。 1、2の両疑問点共にここが原因と思われます。 ### 疑問点1 何かしらのオブジェクトがクリックされた場合、**全てのオブジェクト**がクリックされたオブジェクトを赤色にしています。 それぞれのオブジェクトはこのとき赤色にしたオブジェクトを覚えておき、カウンターが0となった際に記憶していたオブジェクトを黄色にしています。 単体のオブジェクトでしたら問題ありませんが、複数のオブジェクトが同様のロジックで動いた場合、黄色にすべきオブジェクトの変数には**最後に赤色になった**オブジェクトが共通で入っていることになります。 このため最後にクリックされたオブジェクト以外は時間経過で黄色になりません。 流れとしては恐らく以下のようになっております。時間経過で下方向へ状態が変化します。 | オブジェクトA.obj | オブジェクトB.obj | 操作 | | --- | --- | --- | | Null | Null | | | オブジェクトA | オブジェクトA | オブジェクトAをクリック | | オブジェクトB | オブジェクトB | オブジェクトBをクリック | | | | 100フレーム経過 | | オブジェクトB | オブジェクトB | | 両オブジェクト共にオブジェクトBを黄色くするため、オブジェクトAは赤いままとなります。 直接的な解決策としては、二つ目に挙げられたソースのロジックで問題無いと思われます。 ### 疑問点2 上で述べた通り、何かしらのオブジェクトクリック時には全てのオブジェクトが反応しています。 このとき全てのオブジェクトが一斉にタイマーの初期処理も行っているため、結果としてタイマーの始点が揃っていると思われます。 例示されていたA,Bオブジェクトの挙動を図で示しますと、恐らく以下のようになっております。 | オブジェクトA | オブジェクトB | 操作 | | --- | --- | --- | | Aの被クリックに反応 | Aの被クリックに反応 | オブジェクトAをクリック | | Aを赤色にする | Aを赤色にする | | | Aのカウンター初期化 | Bのカウンター初期化 | | | | | 10フレーム経過 | | Bの被クリックに反応 | Bの被クリックに反応 | オブジェクトBをクリック | | Bを赤色にする | Bを赤色にする | | | Aのカウンター初期化 | Bのカウンター初期化 | | | | | 100フレーム経過 | | Aを黄色にする | Bを黄色にする | A,B両方のカウンターが0以下になる | 解決策としては * クリック時の条件に**クリックされたオブジェクトが自分自身である**という条件を加える * 既にフラグが立っていればタイマーの初期化処理をしない 等が考えられます。 なお個人的な意見ですが、この手のアクションをコードベースで制御するのであればコルーチンを用いた方が簡易ではないかと思います。