カテゴリー: Tips (1ページ / 3ページ)

同じ動きなら、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さま。

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

時間経過でのパラメーター加算2

解決した

DeltaTimeを用いて、1秒を加算していき、数秒で一回ごとにパラメーターを変えて行くやつ。

家族で外食に行っていた時に、急に思いつきました。

そうか。「=」じゃないんや。バカですねー。参考にした所にも書いていましたよね「>=」って。

そうね。そうだよねー。もう本当に嫌。こういうしょうもないことに引っかかって

時間経過でのパラメーター加算

直して結果物はこれ。

1個目のパラメーターが順調に加算していきます。

解決したー。前回から直した所は、一箇所だけ。「=」が「>=」。

 

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

public class PrmControl : MonoBehaviour {

	//時間表示用
	public Text TimeT;
	private bool TimeF;

	//3x5 = 15で時間制御
	private float timeN;
	private float timeC = 15f;

	//パラメーター用
	public Slider S1;
	public Text S1t;
	private int numS1;
	private float S1f = 2f;
	private float S1n = 0;

	public Slider S2;
	public Text S2t;
	private int numS2;
	private float S2f = 3f;
	private float S2n = 0;

	public Slider S3;
	public Text S3t;
	private int numS3;
	private float S3f = 5f;
	private float S3n = 0;

	// Use this for initialization
	void Start () {
		//時間制御
		TimeF = false;
		timeN = 0;

		//初期化
		S1n = 0;
		S2n = 0;
		S3n = 0;

		//パラメーター表示
		numS1 = 2;
		numS2 = 5;
		numS3 = 9;

		S1.value = numS1;
		S1t.text = numS1.ToString ();

		S2.value = numS2;
		S2t.text = numS2.ToString ();

		S3.value = numS3;
		S3t.text = numS3.ToString ();
	}
	
	// Update is called once per frame
	void Update () {
		
		if (TimeF == true && timeN <= timeC ) {
			TimeT.text = timeN.ToString ("00");

			if (S1n >= S1f) {
				numS1 = numS1 + 1;
				S1.value = numS1;
				S1t.text = numS1.ToString ();
				S1n = 0;
			} else {
				Debug.Log (S1n);
				Debug.Log (S1f);
				S1n += Time.deltaTime;
			}

			timeN += Time.deltaTime;
		}

		//初期化
		if (timeN == timeC) {
			timeN = 0;
			TimeF = false;
		}
	}

	public void PushButton(){
		TimeF = true;
	}
}

 

ゲームの「確率」のお話

良い記事を見つけた

課金を組み込む予定ですが、特にガチャを組み込む予定はありません。

ただ、ゲームの中で、1週間でのパラメーター上げのとき、一定の確率でパーフェクトになってほしい。

どうやって確率って、組み込むべきかと悩み中。

確率って、1%っていっても、100回ガチャ回したから1回当たる訳ではないじゃん。検索してみたら求めていた記事を見つけました。

私がやろうとしていたものとは違うのですが、すごく丁寧な説明でわかりやすい。

忘れるから、ここに書いておきます。

UnityコミュニティWikiが繋がりました

やっとだ

管理していただいている親切な皆様に遠くで感謝。

世の中は能力者で溢れていますよね・・・。

【リンク】
Unityコミュニティ – Unify Community Wiki

PlayerPrefsXのページはこちら。

【リンク】
ArrayPrefs2 – http://wiki.unity3d.com/index.php/ArrayPrefs2

使い方は簡単。ソースをcsファイル化して、pluginフォルダに突っ込む。あとは、PlayerPrefsと使い方は一緒です。

特に説明なくとも使えるほどよくできているものだと思う!

【Blender】不要なアニメーション(アクション)を削除する。

Blenderが一番大変だった

情報は、溢れています。結構外国の素敵な肩がYoutubeに才能を寄付してくださっているので、参考書不要だと思った。

昔々5000円くらいのBlenderの参考書を買って一度の開いていない(しかも今回も参考にしていない)ということをしたのですが、Youtubeの方が丁寧です。英語分からなくとも、ボタンの動きで把握できるから。動画だもん。

Unity自体では苦労したところはないし、特筆することも特にないんだけど・・・。

とりあえずBlenderでもっとも苦労した、不要となったアニメーションの削除について書き残しましょう。

みんなアニメーション後から不要になることないの?後で「あーやっぱ不要だったべー」ってなったんだけどなー。不要なアニメーションがあると重くなるからどうしても消したかったのです。

こんなにただアニメーションを流すようなものは、ないからかしら。うーん。

アプリ公開できました

情報がなくて大変だった。完全手探り。割と、検索自体はやっているようだけど、求める情報がない。こうすればいいよってブログがあるけど、できなかったよ。

かなり偶然だと思う。とりあえず色々ボタン押してみて、なんとかなった感じ。丸二日?くらいは潰したような気がする。

アニメーションを削除しよう

とりあえずアニメーションを準備

上下するアニメーション「Action01」と右に動くアニメーション「Action02」。

今回はAction01を削除してみます。

NLAエディターでまずは削除

まずは、Action02を表示させてみましょう。NLAトラックで「保留アクション」に削除したいAction01があります。

それでは、NLAエディターを開きます。

現在表示しているのが、Action02。その下に、隠れているのが、保留アクションのAction01

Action01の【保留アクション】を選択して、キーボードの「X」ボタンで削除

保留アクションがなくなりました。ここでは

ビューのところでも保留アクションが削除がされています。

が、しかし。これでは削除されているかのように見せかけて生きている!しつこい!

ドープシートでアクションを削除

次にやるのが、ドープシートのアクションを削除。

アクションをつける、ドープシートを開きましょう。

現在開いているのは、「Action02」。ほらみて。「Action01」が「F」付きでいらっしゃる。

なので、Action01を開く。

「F」が押されているので、もう一度押して選択を解除する。すると数字が消えます。そして、「✖️」を押しましょう。

これで、やっと、Action01が削除されました。もう一度、アクション一覧を開くと、

Action01の前が「F」から「0」になっていることが確認できます。

これでやっと、消したかったアニメーションが削除されました。本当に消えたのか確認したいので、Blenderデータをセーブして、開き直してみましょう。

アクション一覧を見ると、なくなりました。

いやー。これを知るまで大変だった・・・。本当、大変だった・・・。Blender嫌いになりそうだった。

まとめ

1。削除したいアクションを以外を開いておく。

2。NLAエディターで削除したアクションを削除。

3。ドープシートで削除したいアクションを開き、「F」を解除。そして「X」をおす。これで削除。

【Blender】テンキーなしの視点設定

Macで使っているキーボードにテンキーはない

線が邪魔だからの理由で買った当時はテンキーなしにしたのですが。

バカでしたね。色々とすごい苦労すること多い。ただ壊れるところかピンピンしてるから買い換えるのも勿体無い。

なんだかんだやってきていて、BlenderもPhotoshopを入れているWindows端末でやっているから、そこまで不自由することはなかったんですけれども。

UnityはMacで対応しているからいざちょっとした修正を入れる時はすごぶる面倒臭い。

色々調べて、テンキーがない場合(ノートパソコンとか)に数字ボタンをテンキーの数字ボタンとして位置付けることができると。

[blender]テンキーの代替設定(ノートパソコン向け)

これで数字ボタン押せば視点変えてもらえることになった。

【Blender】ミラーがうまくいかないとき

クリッピングし直す

結構これでつまづいたので、メモメモ。

人を作るとき、右半分を作成して、ミラーで対応する。そのとき、重なりが発生するか、微妙に離れて隙間ができることが発生した。

上のキャプチャーは重なった方。この時の対象法としては、以下の手順で対応した。

クリッピングチェックを外す

重心から離す

一旦、重心から離して隙間を大きく作る。

クリッピングチェックを入れる

クリッピングチェックを入れてくっつける。これで綺麗にくっついてた状態のミラーができた。

微妙に離れたり、重ねたりすると肉眼ではちゃんと確認できないレベルで頂点が二つあり、UV展開の時に初めて気づいて吐き気した。

 

1 / 3ページ

© Copyright 2017 「It Happens」 All rights reserved.