のにっき

【Unity】Android用フリック対応ボタン作った

Unityパッケージ公開してるのでぜひ落として使ってください!

 

一回公開すると記法が変えられないなんて・・・泣

今回は、Android用の汎用ボタンを作りました。

細かい機能詰め込んだので使いやすくなってると思います。

ダウンロードリンク

github.com

 概要

f:id:apuridasuo:20190606165719p:plain

図:ボタン仕様説明

パッケージの中に テストシーンを入れてるので開いてみてください。

使ってみると大体わかると思います。

 

使い方【事前準備】

 このパッケージは、C#6への対応が必要です。

下記リンクの「 事前準備【C#6.0導入手順】 」の項目を読んで

NET4.6に対応させてください。※めちゃくちゃ簡単ですので!

【C#6】別スクリプトの関数・定数を簡潔に呼び出す方法 - のにっき

 

使い方【初期設定】

  • インポート

ダウンロードしたパッケージの「Prfb_Button」が汎用ボタンのプレハブになります

f:id:apuridasuo:20190606170104p:plain

図:パッケージ内容

・テストシーン・・・ボタンを実際に使用しているシーン

・中身・・・プレハブで使用しているオブジェクト詰め合わせ

 

  • inspectorで編集が必要な場所 

プレハブをヒエラルキーに追加した後、一部カスタマイズできる部分があります

f:id:apuridasuo:20190606170421p:plain

図:Inspector内容

①.ボタンのID
ボタンの情報(角度など)は、すべてのボタンをまとめた

1つのディクショナリー変数で管理されています。

このボタンIDは、ディクショナリー変数のキーになります

複数ボタンを設置した時は、ボタンごとに別々のIDを設定してください

 

②ボタンの画像

この変数で、「ボタン・タップ範囲」の画像を編集できます。

spriteを自由に設定していただければ反映されますのでカスタマイズしてみてください

Imageコンポーネントに直接画像を設定しても意味ないので注意!

 

③ボタン縮小倍率

ボタンタップ時に画像が赤く+小さくなるのですが、

小さくなる度合いをこの変数で調節できます。

タップ時に画像が小さくなりすぎたり、大きすぎたら調整してください。

この値を大きくするほど小さくなるので注意してください

 

  • 「Btn_MainCntrl」ソースの編集可能な部分

インポート時の「中身」フォルダ内のソースファイルです。

f:id:apuridasuo:20190606171741p:plain

図:ソースの編集可能部分

 ①.入力無効範囲

タップした後、ちょっと右にずれただけでボタンが反応するとウザい場合があります。

それを防止するため、一定範囲のずれは入力を無効化しています。

この値を大きくすると無効化範囲が拡大します

 

②.角度反転許可変数

カメラの向きによっては取得した角度が180度反転している場合があります。

この変数を「true」にすると、取得角度を反転して保持するようになります。

 

使い方【ボタンの情報を毎割り込み更新する方法】

「Update」関数から「SetTapInfo_Time()」を呼ぶだけ!

どのスプリクトファイルでもいいので「Update」関数の中に

「SetTapInfo_Time();」を組み込んでください。全ボタンをこの関数で更新します。

 

使い方【ボタンの情報を取得する方法】

ボタンがタップされているかどうか:dic_AllBtnIf[ キー番号 ].cls_State クラス

bl_IsTapNow・・・ボタンがタップされているかどうか

( true )タップされている、( false )タップされていない

 

タップ情報:dic_AllBtnIf[ キー番号 ].cls_Out クラス

  • i_Houkou_X・・・左右どっちにフリックしてるか

 enum型の変数になってます※「Btn_GetValue」ファイルで定義

eVctr_X.Nom=どっちでもない

eVctr_X.Right=右方向にフリック

eVctr_X.Left=左方向にフリック

  • i_Houkou_Y・・・上下どっちにフリックしてるか

 enum型の変数になってます※「Btn_GetValue」ファイルで定義

eVctr_Y.Nom=どっちでもない

eVctr_Y.Up=上方向にフリック

eVctr_Y.Down=下方向にフリック

  • f_Kakudo・・・フリック角度

float型変数です。角度をそのまま格納しています

  • vct3_Position・・・タップしている座標

Vectro3型です。現在タップしている座標をそのまま格納しています

 

使用例※テストシーンの中身

f:id:apuridasuo:20190606173943p:plain

図:テストシーンのUpdate関数の内容

 テストシーンでは、3つのボタンを作成して各ボタンの情報を

背景のテキストファイルに表示しています。

ボタン情報変数の呼び方の参考にしてください。

 

①3つのボタン情報を更新する関数を呼ぶ

「 SetTapInfo_Time() 」関数を呼ぶだけでOK!

②ボタン情報をテキスト表示している

まず、各ボタンがタップされているかどうかを

「 dic_AllBtnIf[i_LpCnt].cls_State.bl_IsTapNow 」の変数で判定

そして、タップされている場合、

「 dic_AllBtnIf[i_LpCnt].cls_Out 」のクラス内変数から読み取って出力

 

ほめて欲しいところ!

 なんといっても、複数ボタンに対応するために

staticの定義を最小限に抑えて組み込んだところです!

組み込んでる途中は何度もこんがらがったんですが終わってみれば

めちゃくちゃスッキリしたなーと感動しました。。。

 

以上です。

パッケージ化すると色んなアプリに使えるから便利ですよねー

皆さんが個人的に汎用化している物とかできれば見てみたいです。。。