月別: 1月 2018

同じ動きなら、Animatorは一つで大丈夫

Unity始めた時は、わからんかった

なに当たり前なこと言ってんだよってことかもしれませんけど。

私は知らなかったの!知ったのはほんの、一個前のアプリ作った時でした。

つまり、Prefubすごいってこと。アニメーターもまとめてプレハブ化できるー。

こんな感じのパネルがあるとしましょう。

こんな感じで動く。今は「Info」だけにしている。

で、同じ大きさのオブジェクト(ま、パネルですけど)を後3つ、作る。ShopとかSmsとかね。

初心者の私は、それぞれのパネルにAnimatorをそれぞれ作り(つまり4つ)、それぞれを動かしていました。

無駄だね!だって「Info」パネルを作って、Animatorまでつけた状態でPrefubしちゃえば良かったもんね。

スクリプトで区別してやれば良いだけの話。

Prefub化したInfoから、もう一つ作成してやる。

スクリプトは、ボタンを利用するところにつけてます。そこにPublicでAnimatorを設定させる。すると、できちゃう。

ねー。

Animator同じやつめっちゃ作ってたんだよねー。しかもその状態で公開したんだよね(一番初期のやつ)。

2個目のアプリの方が、色々と突っ込んでいるわりには軽いのですが、その理由の一つはこういう余計なものが集約されたからだと思うのね。

恥さらしということで、公開。

Unity パネルを開く

パネル表示しよう

真ん中の黄色い矢印のボタンは「ComputerButton」これをクリックすると「GamePanel」が現れます。

ということで、これがトップ画面。右のパネルのど真ん中にあるイメージ(ボタンコンポーネントつき)をクリックすると、左の子が表示されます。

アプリを稼働させると、こんな感じ。

Triggerが一般的かしら

初期状態 →  ボタンをクリックして、オープン → オープンした状態 (作ってはおいたけど、実装はしていない「クローズ」

ここの説明のブロガーさんは山ほどあるので、説明スキップ。

作成したTriggerは「Open」「Close」の二つ。どんな動きなのかは、名前のとおり。

Triggerをスクリップで設定する。

これもいっぱいあるけど、一応。

スクリプト名は「SubPanelControl.cs」c#です。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SubPanelControl : MonoBehaviour {

	public Animator PanelAnim;

	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	public void OpenPanel(){
		PanelAnim.SetTrigger ("Open");
	}
}

上記スクリプトは「GamePanel」につけています。動かしたいのは、このパネルだから。

AnimatorをPublicにしているので、スクリプトのところで、アニメーションをつけている、己を設定してあげる。

で、これを呼び出すボタンは、こう。

On Click()時に呼び出すのは、「GamePanel」なので、引っ張って設定。「GamePanel」に設定されている、スクリプト「SubPanelControl.cs」の「OpenPanel」関数を設定。

これで終了。

スクリプトなしでTriggerを稼働させる

この記事が、見つからなかったので書く。もっと探せばあるとは思いますけど、やっぱりスクリプトを作成してやるのが主流なのでしょうね。

やり方は簡単。

今回、TriggerさんはString型なので、それを選択し、Triggerを設定すれば良い。

完結な動きをするなら、スクリプトを作成して動かすメリットはないでしょうね。これでいいじゃん。Unityさんが楽にしてくれたし。

ただ、ボタン押してから数秒後に開きたい、もしくは他のパネルやらボタンを推せなくするとか、「アニメーション動かす以外」を混ぜ込みたかっただ、どうしてもスクリプトが必要になる。

全くの余談

椿さんのツイッターで、これすごいって思っていたUnity2017.3の機能。

ズームできる!!!

感動した。ものすごく便利。

Unity Canvas Scalerについて

個人的な設定

そういえば、Unity最初に触った時に、特に何も考えていなくて痛い目を見たのが、CanvasScalerでした。

私の場合は今のところAndroid端末した開発していませんが、ご参考までと、私の設定を記事にします。

今は流れるかのようにこの設定をしてしまうのですが、久しぶりに開いてあ、そういえばと思ったので。

Scale With Screen Sizeで固定

初期で開くと、この状態。

・Unityマニュアル:Constant Pixel Size
・リンク:https://docs.unity3d.com/ja/540/Manual/script-CanvasScaler.html

マニュアルによれば、「UI 要素をスクリーンサイズによらずピクセル単位で同様のサイズに保ちます。」となっています。

なるほど、わからん。

ちょっと記憶が曖昧ですが、これを設定して実機テストをした時に、UIがはみ出る、切れるなどがありました。

画面サイズに合わせて、UIの要素を替える必要があるということかしら、となって「Scale With Screen Size」にしたところ、これがビンゴ。

で、Reference Resolutionとは、「スプライトがこの ‘Pixels Per Unit’ 設定を有していれば、スプライトの 1 ピクセルは UI 内での 1 ユニットをカバーします。」となっています。

なるほど、わからん。

私の認識なので、あくまで参考。

このキャンバスの画像度を設定しているようなものだと思っています。作ろうとしているのは、Android端末のアスペクト比  16:10のもの。ということで、画像度は1920×1200に設定。

で、今、MatchをHeightにしているのですが、高さに合わせて調整して欲しいから。(横に合わせたかったら、Width)

上で一個ボタンを配置していたので、MatchをWidth⇄Heightして見ましょう。

という状態になります。

Canvas Scalerは初期で設定しておかないと大変

私は基本的に以下のように設定します。

・UI Scale Mode : Scale With Screen Size
・Constant Pixel Size : Reference Pixels Per Unit
・Reference Resolution :
アスペクト比が10:16 → 1200 x 1920
アスペクト比が16:10 → 1920 x 1200
・Match :
アスペクト比が10:16 → Width
アスペクト比が16:10 → Heigth

画像度は、高ければ画像もそれなりの画像度を揃えないといけないということです。ま、スマホでみる分はわからないとは思いますけどね。

これが、初期で設定を忘れてUI配置終わってから気づいたとしましょう。

惨事です。

設定変えて全てのUIが移動するのが見えますよ。まだ地道に修正してやらないといけないんで、シーン作成時に必ず初期で済ましています。

Android端末のバックボタンでアプリを終了する。

iOSとは関係のないお話

Android端末の「戻る(Back)」ボタンでアプリを終了させるのは、多分普通のお話。

しかし、私が作っていた3つのアプリは、どれも終了してくれません。

何故なら、実装していないから

何故実装していないかというと!テストしていないから!わからなかったの!!

先日何も考えず自分のアプリつけてバッグボタンで終了させようとしたら、終了したしない!私のお古いiPhoneさんは、戻るで終了してくれました。

ということで、ググる。

以下の記事を発見。

・記事:UnityでのAndroidバックボタン対応
・リンク:https://qiita.com/WassyPG/items/12030494688cba02ce1b

そうか!対応が必要だ!

実機じゃないとわからん

ということで、めちゃめちゃ簡単かつわかりやすく説明いただいているので、ここではソースは割愛。

リンクかけていますので、元記事よりご確認願います。

で、やってみよう。

※Unity 2017.3 of 3で実施

あ、スクリプト名「buootn」なってる。ま、いいか。

とにかく、打ち込んで見たら、ランタイムプラットフォーム判定用のあれが出ますね。なるほどねー。

	if (Input.GetKeyDown (KeyCode.Escape)) {
		Application.Quit ();
		return;
	}

とにかくAndroidプラットフォームの判定を消して(テストしたいんで)稼働させてみる。

※静止画じゃないです。Gifです。
※Macで「Esc」押しています。

これはつまり、実機じゃないとわからんと。

うむ。そうね。テスト保留。これだけのために実機繋ぐにはちょっと設定面倒臭すぎる!

そしてこうやってバグを仕込むのでしょう。

テストは大事けどね。流石に無駄たと思うのです。

実際に実機テストするレベルでやって見ますか。

パッケージ一覧を作成した

一つ作っておけば、別のアプリでもただインポートするだけで使えるようにしたい。ということで一覧を作成しましたの。

有難やGoogleさま。

というか、どんどんお仕事やっているように見えて悲しい。

Google様さま

スプレッドシート偉大過ぎ

ある程度作りたいゲームを固めたので、画面一覧概要を作ってみました。

Google本当、すごすぎ。このクラウド5Gまで無料。個人なので、余裕。素敵。

なんでしょう。数年におよぶ社畜生活のせいか、ここまでやっておけば、なんか進めそうな気がしますね。

やっぱ、きっちきちに締め付けないといけないのかしら。飽きるとやべーって思ったんですけど、飽きないうちに全部決めておいて、飽きててもとりあえずやれば(完全作業だけど)できる形のほうが向いているかもしれません。

で、極力横にそれるような機能をそぎ落としたんですが、それでもシーン分けするだけで、ざっと10を超えました。

おーっと。うむ。あと5か月。頑張る。

絵とかもろもろそろえると考えると、製造だけで純粋にかけられるのは、正直3か月かな?(笑)

お友たちにヘルプは要請するつもりですけどね!

あとは、パッケージ化して合体していく感じで。

明日が会社という地獄が待っておりますので、いやーもう。本当。宝くじあたらない・・・。

新年の目標(という見直し)

5秒の法則

日本では翻訳発売されていないんですが、メル・ロビンスさんの「5秒の法則(ルール)」という本をご存知でしょうか。

※ブロガーさんのまとめ見つけた:
「やる気は5秒で死んでしまう」 行動のブレーキを外すための”自分ルール”のつくりかた

あんまり、この手のビジネス参考書みたいなものは好きじゃないのですが、初めてこれは!と思いました。

要は、「やらないといけないことがわかっているのに、面倒臭く、言い訳を考えていようとしているとき、5、4、3、2、1とカウントダウンを行いとりあえず体を動かす」。

人によって違うと思うのですが、私には有効でした。

・・・どうだろう、秒単位でスケジュールで締め付けられている日本人は向いてるのでは(泣)

目標の見直し(という言い訳)

今まで作っていたものは、飽きると思って「こういうものが作りたいな」と思って、作り始めたものでした。

難しくないし、できるものだと、今も思っているのですがおそらく1年は必要になるのかと。風呂敷を広げすぎて、やらなければいけないものが多すぎました。

というのを年末計算してみた(笑)。

5月で公開できるものにチェインジ。

①機能ごとにパッケージ化して、後で別のアプリに使えるようにする

→部分部分でパッケージ化することができることを知ったのが、つい先先月。

パッケージ化するものも洗い出す。

②風呂敷は広げすぎない。

③ゲーム性は極めて単純に。パズルゲームレベルで。

④人物絵以外は、極力、著作権フリーの素材で賄う。

結構細かいところまで詰めてから、アプリの製作に入ろうと思っています。前回の失敗は、飽きるを想定してだらだらやったのもあった。

今回は割とスケジュール真っ当に組んでやってみようかと。

・・・社畜の成分が消えない。

そして社会人辛い。

来週月曜日までには、どんなアプリにするかガッチガチに決めておきます。

© Copyright 2017 「It Happens」 All rights reserved.