三流豆腐。

三流のゲームプログラマ。C/C++/C#/Objective-C/python/技術向上を目指します。

【Unity】Panelとは……?【uGUI】

Panelとは?

uGUIの部品の1つで、文字通りパネルです。

デフォルトで半透明になってます。

f:id:tofu_doon:20190429220208p:plain

f:id:tofu_doon:20190429220431p:plain

先日上げた記事の続きでフェード処理を実装しようとした時にPanelを使おうとしたのですが、そこでの小さい躓きをご紹介します('ω')

Unityバージョン:Unity 2018.3.13f1

 

目的

 Panelのアルファ値を変更してフェード処理を実装しようと思いました。

なので、スクリプトからSerializeFieldで受け取れば出来そう!

f:id:tofu_doon:20190429221500p:plain

あら……?

Panelの型はないのか!?

早速オブジェクトを確認。

・Panel

f:id:tofu_doon:20190429221733p:plain

 

・Image

f:id:tofu_doon:20190429221927p:plain

ほとんど同じだ……。

ということで、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を生成

f:id:tofu_doon:20190427230817p:plain

f:id:tofu_doon:20190427231006p:plain

 

ManagerのInspectorにフローのObjectを指定。

f:id:tofu_doon:20190427231309p:plain

f:id:tofu_doon:20190427231113p:plain

 

各フローのObjectが遷移後のフローを指定します。

今回はButtonにButton用スクリプトをアタッチしてOnClick()の中で呼び出してます。

f:id:tofu_doon:20190427231611p:plain

f:id:tofu_doon:20190427231620p:plain

 

フローのEnumも用意します。

この時、Managerの中に用意すると呼び出すときにManager.EnGameFlowとなってちょっと長いので、Managerの外に定義してます。

f:id:tofu_doon:20190427231713p:plain

 

後は、ManagerのUpdateでリクエストが来たら今のフローのObjectを削除してリクエストのフローのObjectを生成します。

f:id:tofu_doon:20190427232014p:plain

これで、フロー制御することができました。

 

感想

 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を代入

③どこからでもクラス名.宣言した変数でアクセス可能に

f:id:tofu_doon:20190427211247p:plain

Sceneを跨いで使用しない想定なので自身のgameObjectの削除は行っていません。

f:id:tofu_doon:20190427211258p:plain

これで、他のスクリプトから呼べます。

f:id:tofu_doon:20190427212137p:plain

注意点

他にもシングルトンの実装方法はあったので、もっと調べてみる方がよさそうですね……(>_<)

 

【Unity】シーン遷移

UnityのScene遷移

Unity触っていたら誰もが通ると思います。

Scene遷移。

今回は軽く躓いたところをご紹介。

Unityバージョン:Unity 2018.3.13f1

 

やり方

①using UnityEngine.SceneManagement;を書きます

②LoadSceneの引数に遷移させたいScene名を指定します。

スクリプトをボタン等にアタッチしてメソッドを呼び出します。

Sceneの指定ですが、Asset以下ならパス指定しなくても読み込んでくれるみたいですね。

f:id:tofu_doon:20190426004224p:plain

注意点

こんなエラーが出たときは、

f:id:tofu_doon:20190426004500p:plain

Sceneがビルドに含まれていないので追加してあげましょう。

f:id:tofu_doon:20190426004559p:plain

これで大丈夫。

まぁ、エラーメッセージ読んだらわかるんで躓くことでもないですね('ω')

 

【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が出ます。

f:id:tofu_doon:20190425003414p:plain

f:id:tofu_doon:20190425003430p:plain

注意点

Debug.Logは重いので、製品版では無効化するほうが良いみたいですね。

https://qiita.com/rodostw/items/39183e62ed2a1f52f690

 

【Unity】InputFieldの落とし穴【uGUI】

InputFieldの落とし穴

f:id:tofu_doon:20190424004845p:plain

InputFieldから、数値だけを取得しようとして躓いたことを紹介。

Unityバージョン:Unity 2018.3.13f1

 

入力された数値を取得する

順序:

①InputFieldをHierarchyに生成

②InspectorからContent TypeをInteger Numberへ変更

③textの文字列を数値へ変換

 

Content TypeをInteger Numberへ変更した事で、数値以外の入力を制限できます。

f:id:tofu_doon:20190424005500p:plain

 

 

数値以外の入力を制限したとはいえ、textから取得できるのは文字列なので、Convert.ToInt32を使用して数値に変換します。

※using Systemを忘れずに!

f:id:tofu_doon:20190424005512p:plain


さぁ、これで完璧だ!

と思ったんですけどね……。

 

バックスペースでエラー

バックスペースでInputFieldの数値を全て消そうとすると……。

f:id:tofu_doon:20190424004713p:plain

FormatException: Input string was not in a correct format.

というエラーが!

Content TypeがInteger Numberなのにそれ以外が入ってしまっているみたいですね。

 

対処法

変換前にチェックの処理挟んで解決しました。

f:id:tofu_doon:20190424010221p:plain

文字コードとかで判定しようかと思ったんですが、textからさらに取得して判定して……の流れが面倒だったのでこの形にしました。

もっとスマートなやり方があったら教えてくださいm(__)m

 

【Unity】ScriptableObjectに関するTIPS

ScriptableObjectに関するTIPS

キャラデータなどで重宝するScriptableObject。

何といってもInspectorから編集できるのは便利ですよね。

そんなScriptableObjectのTIPSをご紹介します。

使いどころがあるかわかりませんが。

 何と読み込んだAssetからメソッドが呼べます!w

 

 使い方

手順

①ScriptableObjectのクラスを作る

②他のクラスなどでScriptableObjectのAssetを生成する

③使用するクラスで読み込む

※(Resources.Load、SerializeField等)

f:id:tofu_doon:20190423004120p:plain

f:id:tofu_doon:20190423002447p:plain

f:id:tofu_doon:20190423002145p:plain

Assetからはメソッドは呼べないものだと勝手に思い込んでました('ω')

これで、メソッドを経由してデータ設定したり出来るのでnullチェックとかでバグ等減らせそうですね(白目