【Unity】Panelとは……?【uGUI】
Panelとは?
uGUIの部品の1つで、文字通りパネルです。
デフォルトで半透明になってます。
先日上げた記事の続きでフェード処理を実装しようとした時にPanelを使おうとしたのですが、そこでの小さい躓きをご紹介します('ω')
Unityバージョン:Unity 2018.3.13f1
目的
Panelのアルファ値を変更してフェード処理を実装しようと思いました。
なので、スクリプトからSerializeFieldで受け取れば出来そう!
あら……?
Panelの型はないのか!?
早速オブジェクトを確認。
・Panel
・Image
ほとんど同じだ……。
ということで、Imageで受け取ればいいんだね!w
まとめ
PanelとImageの違い
・Anchors
Panel:stretch
Image:center
・SourceImage
Panel:Background
Image:None(Sprite)
・Color
Panel:.alpha:100
Image.alpha::255
明確な使い分けは思いつかないですね……。
好みですかね(´・ω・`)
他にもありましたら教えてくださいm(__)m
【Unity】SceneManagerを使用しないフロー制御
SceneManagerを使用しないフロー制御
Sceneは1つのまま、内部でフロー制御できないか試したので、ご紹介します。
Unityバージョン:Unity 2018.3.13f1
やり方
①フロー制御のManagerを作成
②フローごとのオブジェクトをPrefab化
③ManagerがフローごとにPrefabを生成
ManagerのInspectorにフローのObjectを指定。
各フローのObjectが遷移後のフローを指定します。
今回はButtonにButton用スクリプトをアタッチしてOnClick()の中で呼び出してます。
フローのEnumも用意します。
この時、Managerの中に用意すると呼び出すときにManager.EnGameFlowとなってちょっと長いので、Managerの外に定義してます。
後は、ManagerのUpdateでリクエストが来たら今のフローのObjectを削除してリクエストのフローのObjectを生成します。
これで、フロー制御することができました。
感想
Sceneを跨がないので、フェードアウトの制御もしやすいと思います。
ただ、LoadSceneとこの方法どちらが早いの検証等もまだしてないので、今後やっていけたらなと思います。
問題点等ありましたら教えてくださいm(__)m
【Unity】FindやSerializeFieldを使用せず他のスクリプトを使用したい!
FindやSerializeFieldを使用せず他のスクリプトを使用したい!
データやオブジェクトを管理するManagerを作ることは多々あると思います。
その際、Manager側のメソッドをFindやSerializeFieldを使って呼ぶのが億劫だと思ったので、ちょっとした方法をご紹介します。
Unityバージョン:Unity 2018.3.13f1
やり方
シングルトンを使用します。
下記の記事を参考にさせて頂きました。
https://www.hanachiru-blog.com/entry/2018/09/26/010232
①Managerのclassと同じ型の変数をpublic staticで定義
②定義した変数にthisを代入
③どこからでもクラス名.宣言した変数でアクセス可能に
Sceneを跨いで使用しない想定なので自身のgameObjectの削除は行っていません。
これで、他のスクリプトから呼べます。
注意点
他にもシングルトンの実装方法はあったので、もっと調べてみる方がよさそうですね……(>_<)
【Unity】シーン遷移
UnityのScene遷移
Unity触っていたら誰もが通ると思います。
Scene遷移。
今回は軽く躓いたところをご紹介。
Unityバージョン:Unity 2018.3.13f1
やり方
①using UnityEngine.SceneManagement;を書きます
②LoadSceneの引数に遷移させたいScene名を指定します。
③スクリプトをボタン等にアタッチしてメソッドを呼び出します。
Sceneの指定ですが、Asset以下ならパス指定しなくても読み込んでくれるみたいですね。
注意点
こんなエラーが出たときは、
Sceneがビルドに含まれていないので追加してあげましょう。
これで大丈夫。
まぁ、エラーメッセージ読んだらわかるんで躓くことでもないですね('ω')
【Unity】Debug.Logに関するTIPS
Debug.Logに関するTIPS
Unityバージョン:Unity 2018.3.13f1
Unity触っていたらよくお世話になるDebug.Log。
すごく基本的なTIPSをご紹介します。
使い方
Logには以下の3種類があり、
①通常のLog
②Warning
③Error
状況に応じて使い分けられそうです。
自分は通常のLogとLogErrorしか使ってませんが。
Assertは引数に(number > 0)のように条件を指定でき、falseの場合Assertが出ます。
注意点
Debug.Logは重いので、製品版では無効化するほうが良いみたいですね。
https://qiita.com/rodostw/items/39183e62ed2a1f52f690
【Unity】InputFieldの落とし穴【uGUI】
InputFieldの落とし穴
InputFieldから、数値だけを取得しようとして躓いたことを紹介。
Unityバージョン:Unity 2018.3.13f1
入力された数値を取得する
順序:
①InputFieldをHierarchyに生成
②InspectorからContent TypeをInteger Numberへ変更
③textの文字列を数値へ変換
Content TypeをInteger Numberへ変更した事で、数値以外の入力を制限できます。
数値以外の入力を制限したとはいえ、textから取得できるのは文字列なので、Convert.ToInt32を使用して数値に変換します。
※using Systemを忘れずに!
さぁ、これで完璧だ!
と思ったんですけどね……。
バックスペースでエラー
バックスペースでInputFieldの数値を全て消そうとすると……。
FormatException: Input string was not in a correct format.
というエラーが!
Content TypeがInteger Numberなのにそれ以外が入ってしまっているみたいですね。
対処法
変換前にチェックの処理挟んで解決しました。
文字コードとかで判定しようかと思ったんですが、textからさらに取得して判定して……の流れが面倒だったのでこの形にしました。
もっとスマートなやり方があったら教えてくださいm(__)m
【Unity】ScriptableObjectに関するTIPS
ScriptableObjectに関するTIPS
キャラデータなどで重宝するScriptableObject。
何といってもInspectorから編集できるのは便利ですよね。
そんなScriptableObjectのTIPSをご紹介します。
使いどころがあるかわかりませんが。
何と読み込んだAssetからメソッドが呼べます!w
使い方
手順
①ScriptableObjectのクラスを作る
②他のクラスなどでScriptableObjectのAssetを生成する
③使用するクラスで読み込む
※(Resources.Load、SerializeField等)
Assetからはメソッドは呼べないものだと勝手に思い込んでました('ω')
これで、メソッドを経由してデータ設定したり出来るのでnullチェックとかでバグ等減らせそうですね(白目