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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

2342閲覧

ゲームシーンからクリアシーンへの移行について、指定したオブジェクトの色が変わったらクリアシーンに移行したい

YYGAME

総合スコア15

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

1クリップ

投稿2017/02/18 07:43

色を塗っていくゲームを作成しています。
指定されたオブジェクト全ての色を塗ることが出来たらクリア画面に遷移をしたいと思っています。

しかし全ての色が塗り終わったという処理をどのように書けばいいのか分からず困っています。
どなたかどうしたらいいかわかる方がいましたら教えてください。

これが作業中の画面です。
よろしくお願いします。 イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

例えば、塗られる側のCubeにアタッチされているスクリプトのクラス名がHogeとすると、
Hogeに塗られた時にセットされるFlg等のpublic変数を定義しておく。

後は、負荷軽減のためStart()のタイミングで、FloorCube配下のCubeにアタッチされているHogeを取得しておいて、Updateなり塗られたタイミングなりですべてのHogeのFlgが立ってたらシーンチェンジとすればいいのでは?

CubeにアタッチされているHogeクラス

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Hoge : MonoBehaviour { 6 7 public bool Flg = false; 8 9 // Use this for initialization 10 void Start () { 11 12 } 13 14 // Update is called once per frame 15 void Update () { 16 17 } 18}

他のオブジェクトにアタッチされているスクリプト

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ClearCheck : MonoBehaviour 6{ 7 8 Hoge[] childScripts; 9 10 void Start() 11 { 12 // 前もってスクリプトインスタンスを配列で取得 13 var floor = GameObject.Find("FloorCube"); 14 childScripts = new Hoge[floor.transform.childCount]; 15 for (int i = 0; i < floor.transform.childCount; i++) 16 { 17 Hoge h = floor.transform.GetChild(i).GetComponent<Hoge>(); 18 childScripts[i] = h; 19 } 20 21 } 22 23 void Update() 24 { 25 // 配列を走査しすべてのフラグが立ってたら 26 for (var i = 0; i < childScripts.Length; i++) 27 { 28 if (!childScripts[i].Flg) 29 { 30 return; 31 } 32 } 33 // シーン切り替え処理 34 } 35}

投稿2017/02/18 09:26

編集2017/02/19 05:33
turbgraphics200

総合スコア4269

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

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

YYGAME

2017/02/19 05:03

迅速で大変丁寧な回答、本当にありがとうございます。 動かして色を塗る方のキューブの、色を塗る為のスクリプトに上のスクリプトを追加。 色を塗られる側のキューブに下のスクリプトを新しく追加したのですが 塗り終わってもシーンが移動しませんでした。 あと childScripts = new Hoge[p.transform.childCount]; これの、p.transformの部分がエラーになってしまったのでfloor.transformに変更しました。 書く場所や内容を間違えてしまっていますか? シーンの切り替え処理は using UnityEngine.SceneManagement;を書いて SceneManager.LoadScene("ClearScene"); と書きました。ビルドセッティングの方もしています。 こんなに丁寧に回答していただいたのに解決できず申し訳ありません。 もう一度ご教授の方よろしくお願いいたします。
turbgraphics200

2017/02/19 05:43

FloorCubeがどのような構成なのかが分からなのですが、FloorCube配下にCubeがたくさん配置されていると判断しました。このCube一つ一つにHogeクラスがアタッチされているという想定です。 ですので、Cubeのプレハブを作成し、そのプレハブにHogeクラスをアタッチ。スクリプトでプレハブからインスタンスを生成して配置した方が楽でしょう。 あとは、"// シーン切り替え処理"というコメントのところでSceneManager.LoadSene()を実行(実行する前に全てのCubeの(Hogeクラスの)Flgをfalseにした方がいいと思います)
YYGAME

2017/02/19 07:13

本当に迅速で丁寧な回答をありがとうございました。 構成はおっしゃる通りです。 教えていただいた通りに書いたところ、無事画面遷移が出来ました! 本当にありがとうございます。 また分からない所がありましたらよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問