Alpaca Games Blog(旧AlpacaTech)

ゲーム作る系 草食動物の備忘録

UnityCloudBuildが始まらない

f:id:alpacatech:20171122152736p:plain

Beta期間が終わって、

Unity Collaborate の容量に制限が出来たみたいです。

容量に空きができないとCloudBuildは動作しないみたいです。

f:id:alpacatech:20171122153106p:plain

Personal(無料)ユーザーは1GBです。

 

 

Personalユーザーで今後も多めの容量を使いたい場合は、

月額 $9 のUnity Teamsに入ると利用できます。

 Unity - Unity Teams

Plus/Proユーザーの場合は無料で使えるようです(2017/11/22)現在 

 

#unity1week 参加しました6回目【イワシシューティング】

 

f:id:alpacatech:20170905012756p:plain

Unity1weekとは

Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

お題をもらって1週間でゲーム作るイベントです。

6回目の参加。

今回のお題は「SPACE」です。

宇宙は無限の可能性を秘めています。

 

作った物

 よくある2Dシューティングです。体力で攻撃変化するボスまで作りました。

稼ぎポイントも入れたりしました。

 

作業日記

 1日目

イワシアセットが話題だったのでぶっこみました。

 

・キャラバンみたいな2分でスコア競うの作りたかった

2日目

・ DOTweenPRO利用者多かったので導入してみた。

コード書かずに単純アニメ作れるから超便利。

イワシの出現処理もDOTweenPRO。

 

・地味ですが、敵に弾が当たった時に白く光らせるスクリプト書きました。

Emissionをいじってるだけです。 

 

3日目

・レーザー作成。LineRender制御

弾幕システム作成(〇way/ばらまき/加速/ホーミング等対応)

・導入したモデルアセット達の仕様がバラバラだったので、白光スクリプトを子列挙使って汎用性高めた。

・敵の細かい制御にはDOTweenに限界を感じたので、Animationにすることを決意

 

4日目

ここら辺で、きちんとステージ配置するかランダムゲーにするか迷った。ステージ配置を選んでしまい大変。

・敵配置ツールを作る。一応早回しやスクロール一時停止も対応。

・UnityAnimationのイベントを利用して「弾を打つタイミング」「キャラクタのアニメ変更」できるようにした。AnimationEvent便利

 

5日目

土日作業できないので深夜頑張った。

・今までのシステムで敵を量産。ボスだけ追加でスクリプト

・一応完成!(適切な音楽見つからなかった以外)

 

 

使用アセットの紹介

キャンペーン中という事なので贅沢に使ってみました。

 キャラクター達

Sardine主人公のイワシ。今回の企画の発端です。

Snow Crab (Chionoecetes)イワシの作者様のカニ。80種以上のアニメーション

Animating Fish 3D Low Poly HUMPBACK WHALE Low Poly Asteroid Pack

9種類の魚介類

クジラ

隕石群

 

作者様毎でマテリアルやアニメの仕組みが違うので、
白く光らせる等を行うために
汎用的にできるスクリプトを記載したりしました。

 

UI 

139 Vector Icons 無料の139種のアイコンです。便利!

 

TextMesh Pro 高速できれいなフォント描画

おそらく文字画像を距離情報に置き換えてるので、低用量、高速、拡大しても綺麗を実現している描画です。

論文

http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf

 

背景、エフェクト

Skybox Volume 2 (Nebula) 大きな惑星付きの宇宙SkyBox

隕石等が動かないのが多少気になるけど、無料でのこのクオリティ。 

40 CG Sci-Fi Effects Pack バリアエフェクトと宇宙の霧とダストを利用。宇宙感マシマシ

Pixel Arsenal 大好きな、ピクセルアート風パーティクル

 

BGM

Game Music Pack - SUITE  様々な種類の曲

今回はテンポいい曲を利用。

随時曲を追加しているいいアセットです。現在Ver4.1.0

 

その他

DOTween (HOTween v2) 様々な補間。シンプルな演出ならこれで十分。

似たアセットでiTweenがあるのですが、こちらの方が軽いらしいです。

座標だけでなく拡大回転、色、文字を一文字づつ出すなどが手軽にできます。 パスで曲線移動もできます。

 

DOTween Pro  DOTweenは、コードを書く必要があるのですが

PROはそれのツールが追加されています。

今回初めて使ってみましたが作業効率が格段にあがりました。(殆どノーコーディング)

ただ、一時停止等の小回りやイベント処理はあまり得意でないので

敵の制御はUnity標準のAnimationを利用しました。

 

シューティング部分

 こだわりがあったので弾幕、敵配置、制御はアセットに頼らず自作。

柔軟に行けると同時に作業量多すぎて大変でした。

 

 

最後に 

反省

・見積もりが甘く、細かいところまで作りこめなかった。

・アヒルの時も感じたのですが、リアル系はあまり惹かれないらしい

・プレイヤーさんとのジェネレーションギャップやゲーム慣れ程度も想定外

 

よかった

・シューティングの敵配置や動きを比較的楽に量産できる程度の力を得た。

・何だかんだでシューティング一面分できた。

イワシが輝いてると感じてくれたので嬉しい。

 

来年は、見た目、シンプル、爽快、セルフブランディングを考慮した方向性で行きたいです。

バズりたい^q^

 

libpngでエラー出たメモ

 

結論

結論から書くと

8bit深度しか対応してなかったのに

16bit深度のpngを読み込んでバッファオーバーフローしてました。

 (iPhone8等のスクリーンショットは何故か64bitカラー)

 

問題

今まで問題なく動作していたpng読み込みでエラーが発生しました。

初回例外が 0x00007FF81B0B775F (ntdll.dll) で発生しました (Test.exe 内): 0xC0000374: ヒープは壊れています。 (パラメーター: 0x00007FF81B1186B0)。
というエラー。f:id:alpacatech:20171024170219p:plain

デバッガで見たらpng_read_image で例外発生している模様


原因

pngファイルのビット深度が8bitでなく16bitだった。
8bitしか考慮していないコードを書いていたので
png_read_imageでバッファーオーバーフローしていました。

 

対策

受け取るバッファを16bitサイズに対応すると問題なくなりました。


データ内容について

今回の16bitカラーの場合、
トルエンディアンでなくビッグエンディアンなので入れ替える必要がある。

8bitカラーで受ける場合はそのまま&0xFFで取得で問題ない。

 

 OpenCVで16bit深度の画像を読み込んだ場合

OpenCV2.4.11で
16bitpngをcv::imreadした場合は、
flags=1 の場合 CV_8U(8bitで読み込み)
flags=-1の場合 CV_16U(16bitで読み込み)
で取得できていました。

 

64bit pngはどうやって作成されていたのか?

 iPhone/iPadでスクショをとった場合、

今までは24bit pngで保存されていました。

iPhone8 iOS11でスクショをとると64bit pngで保存されるようです。

iPhoneSE iOS11でスクショは、24bit pngでした。

 

アプリ利用者で

iPhoneのスクショを読み込んだ際、

アプリが落ちる、表示されない、色がおかしい等の現象が起こる場合、

24か32bitに変換すると動作すると思われます。

 

 

【Unity】自前のスクリプトでもInspector上でイベント登録したイベントを実行したい

UI.Buttonでボタン押したときに実行されるイベント登録のこれ

f:id:alpacatech:20170915191719p:plain

 押したときに、単純な引数1個までのメソッドなら呼び出せて便利。

 

自分のスクリプトでも何か行った時に、

登録しておいたものを実行するようにして汎用性持たせたい時がたまにあります。

 

UnityEventというクラスですぐに実装できます。

 

・変数追加

[SerializeField]

private UnityEngine.Events.UnityEvent OnFooEvent;

 

f:id:alpacatech:20170915192629p:plain

 

で、Inspectorに出てきました。

 

実行は、Invoke()です。

以下は、Updateごとに実行されます。 

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

public class EventTest : MonoBehaviour {

    [SerializeField]
    private UnityEngine.Events.UnityEvent OnFooEvent;

    void Update () {
        //  登録しておいたものが実行される
        OnFooEvent.Invoke();
    }

}

f:id:alpacatech:20170915193332p:plain

f:id:alpacatech:20170915193348p:plain

 

 

詳しいことは、

うら干物書きさんが細かく書いてました。

www.urablog.xyz

 

 

 

 

 定期的に忘れるし調べ方もよくわからないのでメモ。

 

ファイルのドラッグドロップ受付

フォームのプロパティ変更

AllowDrop = True

イベント処理

DragEnterとDragDrop
(ドロップ許可とドロップ処理)
が必要

//	ファイルドロップエンター
private: System::Void MainForm_DragEnter(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) {
	if (e->Data->GetDataPresent(DataFormats::FileDrop))
	{
		e->Effect = DragDropEffects::Copy;
	}
}
//	ファイルドロップ
private: System::Void MainForm_DragDrop(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) 
{
	auto files = static_cast<array<String^>^>(e->Data->GetData(DataFormats::FileDrop, false));
	System::Windows::Forms::MessageBox::Show(this, files[0]);
}

#unity1week 参加しました5回目【水上レース】

f:id:alpacatech:20170905012756p:plain

 

Unit1Weekとは?

unityroomさんで毎月開催されている(次回から3ヵ月おきになるみたいです)

Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

 ・一週間でゲームを作るイベントです。
・月曜00時にお題が発表されます。
・日曜20時までにお題に沿ったゲームを作ります。

 

今回のお題はフロー(流れる)です。
こんなゲーム作りました。クリックで動画再生されます。

なんとか5連続で参加できました。

 

ですが今回は、

ある程度遊べるようになっているものの

順位やクリア時間関連が未対応で時間切れになりました。 

 

 

目次

仕様決定について

最近シェーダー触り始めていて、

 
なんか屈折表現とかポストエフェクトしたいなと思っていました。

流れるといえば水。

ネットを見ていて川で流れるアヒルちゃんとかいいなと思ったので作成開始。

 

風呂というダジャレも兼ねたいから、
無料の風呂タブを利用してみましたが狭かったり見た目の問題で断念。

 

ぽちゃぽちゃあひるちゃんみたいな緩いのを考えていたのですが、
ヒルを複数をNavigationで走らせてみると、

レースゲームを作ってみたいという欲求が出てきてレースゲームに決定しました

 

 

作り方

プレイヤーについて

水上レースなので浮力表現をしてみました。
一定の高さ以下なら、Y方向にAddForce(水に漬かってる面積で割合)でそれっぽく浮いていたのですが、
Twetter見ていたら、

という情報がありこちらを利用してみました。

 

Yベクトルの浮力はライブラリに任せて、

XZベクトルをAddForceでゲーム用に細かい制限をかけて行いました。

(最高速度の設定、コイン取得時の最高速度上限アップ等)

 

 


コースと敵の動き

f:id:alpacatech:20170905020232p:plain

・外観

コースの基本はterrainを掘り、オブジェクトをぽつぽつ置いてみました。


・敵の動き

時間がないのでNavigationを利用しました。

そのままBakeした場合、水面下で動いてしまうので

水面下-0.4あたりに板を置きました。

 

・敵の目標地点設定

敵は、画像の赤い範囲に触れると次のチェックポイントを目標にして進み、

チェックポイントに触れたらその次へという仕組み。

f:id:alpacatech:20170905020651p:plain

CheckPointManagerが子を列挙して、

それぞれの子の次のチェックポイントを自動設定するようにしました。

これでチェックポイントが増減しても手動でつなぎ合わせる必要がないです。

 

Gizmoでそれっぽい線も引きました。

 

・ゴール判定

ゴール地点に判定があり、

ゴール反対側に青いチェックポイントも置き、

ゴールに触れると1週というルールです。

*逆走を考えるとチェックポイントを複数置いてカウンタ管理する必要があります

 

・オブジェクト

速度が上がる床

速度の上限があがるコイン

ジャンプ台

を作成して、配置。

 

・その他

滝の裏にショートカット作った

 


アセット

AssetStore

お風呂(無料)

 https://www.assetstore.unity3d.com/jp/#!/content/25255

 背景(無料)

https://www.assetstore.unity3d.com/jp/#!/content/63714

ヒル(0.27$)

 https://www.assetstore.unity3d.com/jp/#!/content/34781

 

ダッシュ時の集中線

静止画の集中線を

f:id:alpacatech:20170905023132p:plain

ランダムで回転するとそれっぽいエフェクトになりました。

f:id:alpacatech:20170905023705g:plain

 

  

 

反省

反省点

・細かい所にこだわりすぎて全体を完成できなかった。

・処理が重かった。

CPUもGPUもそれなりに利用したので、MacBookAirでかくついてた。

・シェーダー書くつもりが、UnityのAssetを利用した。

 

よかったこと

・Unity Collaborate + CloudBuild  で、作業しながらWebGL版をビルド

作業の手を止めずにビルドでき、休憩時に動作確認できた。

いろいろ罠にかかったけど便利でした。

*罠については別記事で書くかもしれないです。

 

・レースっぽいゲーム作れた。

個人的に遊んでて楽しい。知り合いも楽しんでくれた。

 

時間があればスマホ版目指して完成版作りたいです。

 

【Unity】フォントファイルの容量を減らして比べてみた

前回、

NotoSansフォントファイルの容量でかすぎるよ(アプリ容量が16MBぐらい増える)

と言ってたのですが、

 

フォントファイルをサブセット化
(フォントファイルから一部取り出したフォントファイルを作る)
すると軽くなるっぽいので試してみました。

参考にしたのは、以下の記事です。

11neko.com

 

手順を簡単に書くと、

武蔵システム様のサブセットフォントメーカーを利用して、

第1水準の漢字を指定してサブセット化する。

です。

 

ファイル容量の違い 

対象:NotoSansCJKjp-Regular.otf

で行うと、
16MB から 0.7MBになりました。

Unityでビルドした時もアプリのファイルサイズ減りました

 

見た目の違い

Unity.UI.Textで表示した結果は以下の通りです。

f:id:alpacatech:20170727191643p:plain
上から順に
・未加工(16MB)
・サブセット化(0.7MB)
・Arial(Unityのデフォルト)

です。


微妙に違うのは、

サブセットフォントメーカーに記載されてる通り、
サブセット化する際に情報が一部削除されていると思われます。たぶん。

(「綺」が変わりすぎてるのは、JIS第1水準に含まれてない為です)

 

フォント形式は、TrueTypeからOpenTypeになっています。

adlive.co

 

フォントファイルサイズ問題に関しては、

フォントファイルをTexture化する「TextureMeshPro」使ったら解決しそう(未確認)なのですが、

 

TextureMeshProに移行するのが大変、
フォントサイズ大きくてアプリ容量減らしたいと思う時は試してみるといいかも。