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

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

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

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

Unity3D

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Unity

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

Q&A

解決済

1回答

3052閲覧

複数オブジェクトのクリック数の管理、回数の表示の止め方

TKGU

総合スコア3

C#

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

Unity3D

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Unity

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

0グッド

0クリップ

投稿2020/10/28 18:55

現在、クリッカーゲームのようなものを作っております。

このコードの目的は、画面に配置された複数の3Dオブジェクトをクリックするごとに
画面に表示している数字が減っていき、0になったときにシーンの遷移を行うものです。

ですが、困っている点が2点あります。

1. 画面に表示されている数字が0になったときにシーンの遷移中(フェードアウト中)にも
クリックは可能なので、0以降でもクリックをすればマイナス値のカウントが始まります。
なので0になってから遷移後までは、クリックを受け付けないようにしたいです。

2. 現在のコードでは、オブジェクトに個別でこのスクリプトを追加して、カウントが可能となっています。しかし、仮にAとBの2つのオブジェクトに追加した場合、それぞれ残りカウントが10から開始するためAとB交互にクリックしたとき、実質合計20回のクリックをしなければなりません。
(カウントは10から始まりますが、表示にはそれぞれの残り回数に切り替わります。)
なので、残り回数は全てのオブジェクト共通のものにしたいと考えています。

ちなみに、自身ではコライダー付の空のオブジェクトを作成して、スクリプトを追加した状態で、
そこに全ての3Dオブジェクトを子にして、試しましたがうまくいきませんでした。

長文な上、伝わりにくい文章で大変申し訳ないのですがどなたか
ご回答いただけると幸いです。よろしくお願い致します。
何か説明不足に感じられる部分があれば遠慮なく申し付けください。

(バージョンは 2019.2.12f1 です。)

using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class Count : MonoBehaviour, IPointerClickHandler // クリックを取得するためのインターフェースを実装 { [SerializeField] Text countText; // Textをアタッチ int count; void Start() { countText.text = "10"; // テキスト初期化 count = 10; } // このスクリプトがアタッチされたオブジェクトがクリックされたときの処理 public void OnPointerClick(PointerEventData eventData) { count--; // 回数を減少 countText.text = count + ""; // テキストを更新 } void Update() { if (count == 0) { FadeManager.Instance.LoadScene("3.AddText", 2.0f); } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんなんどうでしょう。適当に作ってみました。
ネーミングとかはあれですが。参考まで

・シーン
Scene

・カウンター
ClickCounter

C#

1public class ClickCounter : MonoBehaviour 2{ 3 [SerializeField] Text countText; 4 int count; 5 public int Count { get => count; set => count = value; } 6 7 void Start() 8 { 9 countText.text = "10"; 10 count = 10; 11 } 12 13 public void DecreaseCount(){ 14 if (count == 0) return; 15 16 count--; 17 countText.text = count + ""; 18 19 if (count == 0) 20 { 21 Debug.Log("LoadScene"); 22 23 } 24 } 25} 26

・クリックでカウンター更新
クリックしたいやつに追加

ClickableObject

Collider追加

C#

1public class UpdaterClickCounter : MonoBehaviour 2{ 3 [SerializeField] 4 ClickCounter clickCounter; 5 6 private void OnMouseDown() 7 { 8 if(clickCounter.Count > 0){ 9 clickCounter.DecreaseCount(); 10 } 11 } 12}

投稿2020/10/28 23:33

newBee

総合スコア82

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

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

TKGU

2020/10/29 08:30

出来ました!画像付で非常に助かりました。 動作問題なしです。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問