C#でボタンを押した時の文字の表示・非表示の使い方や切り替え方法をわかりやすく解説!
 
          
- システム
 エンジニア
- C#でボタンを押したときの文字表示・非表示の切り替え方法を教えてください。
- プロジェクト
 マネージャー
- 知っておくと便利なボタンの表示・非表示の切り替えにして説明します。
C#でボタンを押した時の文字の表示/非表示の切り替え方法

            C#でボタンを押した時の文字の表示/非表示の切り替え方法を知っていますか。ゲームのチュートリアルで操作説明を表示したり、非表示にしたりする時に使い方を知っていると便利です。
C#のスクリプトでボタンを押した時の文字の表示/非表示を切り替える方法について使い方をまとめましたので興味のある方はぜひご覧ください。
ボタンを押した時の文字の表示/非表示の使い方
ボタンを押した時の文字の表示/非表示の使い方は大きく分けて2つあります。
1つ目は、publicのToggleメソッドを用意してOnClickからトグルを呼べるようにする使い方です。
2つ目は、uGUIのボタンにAddListnerをする使い方です。
今回はC#の使い方を解説しますので、1つ目の「publicのToggleメソッドを用意してOnClickからトグルを呼べるようにする」使い方をまとめて解説していきます。
ちなみ私の開発環境はMacBook Proを使用しています。Unityのバージョンは2019.4.22f1です。他のバージョンでも特に問題はないのでぜひ一緒にスクリプトを書いてみてください。
1.ボタンを作る
まずボタンの作り方から解説していきます。
Unityを開き[GameObject]->[UI]->[Button]を選択してください。今回はゲームのチュートリアルの操作説明ボタンを作りたいので名前をHowToPlayButtonに変更してください。
インスペクター内のポジションと大きさはお好みで大丈夫です。私の場合PosX、PosY、PosZは全て0にしています。大きさはWidth160、Heithg30です。
2.テキストを用意する
次にボタンを押した時に文字が表示されるためのテキストを用意します。今回はボタンを押すとゲームのチュートリアルの操作説明のテキストが表示されるように作ります。
[GameObject]->[UI]->[Text]を選択してください。名前をHowToPlayTextに変更してください。テキストの文字はC#のスクリプトで書いていくのでInspector内には何も書かなくて大丈夫です。
ポジションはHowToPlayButtonと同じにすると重なってしまうので、PosY -50ほどに設定しておくとよいでしょう。
3.スクリプトを作る
次にスクリプトを作っていきます。
[Project]->[+]->[C# Script]を選択してください。名前をGameSystemに変更してください。
GameSystemオブジェクトで管理するため、[GameObject]->[Create Empty]を選択し、GameSystemオブジェクトを作ります。名前をGameSystemに変更してください。そしてGameSystemスクリプトをこのオブジェクトにアタッチします。
4.C#でスクリプトを書く
ではいよいよC#でボタンを押した時の文字の表示/非表示を切り替えるスクリプトを書いていきます。以下のように書いてください。
| 
                          1
                         
                          2
                         
                          3
                         
                          4
                         
                          5
                         
                          6
                         
                          7
                         
                          8
                         
                          9
                         
                          10
                         
                          11
                         
                          12
                         
                          13
                         
                          14
                         
                          15
                         
                          16
                         
                          17
                         
                          18
                         
                          19
                         
                          20
                         
                          21
                         
                          22
                         
                          23
                         
                          24
                         
                          25
                         
                          26
                         
                          27
                         
                          28
                         
                          29
                         
                          30
                         
                          31
                         
                          32
                         
                          33
                         
                          34
                         
                          35
                         
                          36
                         
                          37
                         
                          38
                         
                          39
                         
                          40
                         
                          41
                         
                          42
                         
                          43
                         
                          44
                         
                          45
                         
                          46
                         
                          47
                         
                          48
                         
                          49
                         
                          50
                         
                          51
                         
                          52
                         
                          53
                         
                          54
                         | 
                          using System.Collections;
                         
                          using System.Collections.Generic;
                         
                          using UnityEngine;
                         
                          using UnityEngine.UI;
                         
                          public class GameSystem : MonoBehaviour
                         
                          {
                         
                              // ボタンをインスペクタからアタッチする場合は1の方法です。
                         
                              public Button howToPlayButton;
                         
                              public GameObject howToPlayText;
                         
                          
                         
                              // 表示中かどうかのステートを書きます。
                         
                              private bool isDisplay = false;
                         
                              // 外部から表示中かどうかを見たい場合は用意します。(なくてもいいです。)
                         
                              public bool IsDisplay => isDisplay;
                         
                          
                         
                              private void Start()
                         
                              {
                         
                                  // ボタンをアタッチしている場合は押したらトグルが呼ばれるようにします。
                         
                                  howToPlayButton?.onClick.AddListener(ToggleText);
                         
                              }
                         
                          
                         
                              // ボタンが押された際に呼ばれるようにします。
                         
                              public void ToggleText()
                         
                              {
                         
                                  if (isDisplay)
                         
                                  {
                         
                                      // 表示中なら非表示にします。
                         
                                      HideHowToPlayText();
                         
                                  }
                         
                                  else
                         
                                  {
                         
                                      // 非表示中なら表示にします。
                         
                                      ShowHowToPlayText();
                         
                                  }
                         
                              }
                         
                          
                         
                              // 操作説明のテキスト入力です。privateでも可能ですが、表示/非表示のボタンを結局別で用意することになった場合に役立つためpublicにしています。
                         
                              public void ShowHowToPlayText()
                         
                              {
                         
                                  howToPlayText.GetComponent().text = "[キーパッド]\n←↑→ 移動\nShift 走る\nSpace ジャンプ\nE 攻撃\n\n[ゲームパッド]\n左スティック 移動\n右スティック カメラ操作\nL2 走る\n☓ ジャンプ\n○ 攻撃";
                         
                                  isDisplay = true;
                         
                              }
                         
                          
                         
                              public void HideHowToPlayText()
                         
                              {
                         
                                  // 非表示時は文字列に何も入れなければいいです。
                         
                                  // howToPlayText.GetComponent().enabled = false; でも可能です。(この場合はShowのときはenabled = trueにする必要があります。)
                         
                                 howToPlayText.GetComponent().text = "";
                         
                                 isDisplay = false;
                         
                              }
                         
                          }
                         | 
最後にGameSystemオブジェクトのInspectorにアタッチしたGameSystemスクリプトへHowToPlayButtonとHowToPlayTextをドラッグアンドドロップするとボタンを押した時に表示/非表示を切り替えることができます。
5.C#のスクリプト解説
スクリプト内の解説をしていきます。
表示中かどうかをbool値のisDisplayを使って表しています。表示にしたい時はShowHowToPlayText関数内でisDisplay = true;にします。非表示にしたい時はHideHowToPlayText関数内でisDisplay = false;にします。
ShowHowToPlayText関数内ではゲームの操作説明の文字を表示したいので移動、走るなどの文字を適当に書いておきました。HideHowToPlayText関数内では文字列に何も入れなければ非表示にできます。
howToPlayButton?.onClick.AddListener(ToggleText);でトグルが呼ばれるようにしています。トグルとは押すことができるボタンという意味です。
ToggleText関数内でif文を使いボタンが押された時に表示中なら非表示へ、非表示なら表示へ切り替えられるようにしています。
- システム
 エンジニア
- ボタンの切り替え方法について理解できました。
- プロジェクト
 マネージャー
- 切り替え方法をマスターするだけで、出来る事の幅が広がりますよ。
C#でボタンを押した時に文字を表示/非表示にしてみよう
いかがでしたでしょうか。C#ではボタンを押した時に文字の表示/非表示を切り替えることができます。使い方を知るだけでできることの幅が大きく広がります。
また、UnityのuGUIを使った方法もありますのでC#のスクリプトでうまくいかない方はこの方法で試してみてください。
この使い方を知るとOnValueChangedでbool値がとれます。つまりトグルボタンにチェックがついている時が表示であるというステートをボタンに任せることができます。
ぜひご自身でC#のソースコードを書いて、理解を深めてみてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
          
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
          数多くのエンジニアが集まります。

- 
              スマホアプリから業務系システムまで スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。 
- 
              充実した研修制度 毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。 
- 
              資格取得を応援 スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。 
- 
              東証プライム上場企業グループ オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。 安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。 
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
              まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
- 
              
              システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務月給29万~34万円東京都新宿区(新宿駅)
- 
              
              システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務月給41万~50万円東京都新宿区(新宿駅)
- 
              
              デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務月給29万~34万円神奈川県横浜市(桜木町駅)
- 
              
              デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務月給41万~50万円神奈川県横浜市(桜木町駅)
- 
              
              基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務月給29万~34万円東京都新宿区(西新宿駅)
- 
              
              基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務月給41万~50万円東京都新宿区(西新宿駅)





