「ゲーム開発」カテゴリーアーカイブ

占いのスマホアプリ公開!

今回はゲームではないけど、またAndroidでアプリを公開しました。

元からあるサイトをアプリ化するだけだから簡単だろう、と思ったんだけど、ページ構成で結構悩みました。最初は複数ページに分けて表示させてたんだけど、最終的に1ページに全部おさめてみた。

試行錯誤してたので完成まで3ヶ月くらいかかったよ。まだあちこち手を入れたいけど時間かかりそうだったので、とりあえずリリース。

ダウンロード

↓Google Playからダウンロード出来ます。Android 4.1以降、完全無料です。
https://play.google.com/store/apps/details?id=com.yagasuri_games.kudamon

スマホアプリで浮世絵の15パズルを公開!

3ヶ月ぶりにスマホアプリを公開しました。

今回もシンプルなお題をということで、15パズルにしてみました。

開発期間は基本システムに1週間、それ以外のもろもろに1ヶ月って感じです。UIとかステージセレクト画面とか毎回どうしようか迷う。

プレイ動画

ダウンロード

↓Google Playからダウンロード出来ます。Android 4.1以降、完全無料です。
https://play.google.com/store/apps/details?id=com.yagasuri_games.ukiyoepuzzle

「シンプルタウン – 漫画の資産」ためしてみる

Unityアセットストアで5ドルくらいで売ってるシンプルタウン – 漫画の資産を触ってみた。しかし漫画の資産って面白いな。元の英語では「Cartoon Assets」みたい。

デモにはコントローラもコリジョンもないので、とりあえず地面にはPlaneを配置。そしてStandard Assetsの「First Person Controller」を使う。これで自由に歩けるようになった。

タイトルの通りシンプルな街で良い感じ。ただモバイルで使うにはかなり最適化が必要そう。

ともかく、建物とかにもコリジョン付けて、あとはキャラクタを配置すれば何かゲーム作れそうだ。

ユニティちゃんが暗算で戦うスマホゲーム公開!

1年ぶりにスマホゲームを公開しました。

画面に出てきた計算式を4択で答える、というシンプルなゲームです。

基本システムは1週間くらいで作れたので、この調子なら1ヶ月もあれば完成するじゃん、なんて楽観してたのに、アニメーションやら細々とした機能の調整やらで凄く時間かかってしまいました。

開発中断してた時期があるとはいえ、まさか1年もかかってしまうとは。

ともかく1プレイ20問、4択で答えるだけの単純なゲームです。息抜きがてらにでもプレイしてもらえれば嬉しいです。

プレイ動画

ダウンロード

↓Google Playからダウンロード出来ます。Android 4.1以降、完全無料です。
https://play.google.com/store/apps/details?id=com.yagasuri_games.unityanzan

© UTJ/UCL

Unityで作成したスマホアプリの軽量化方法11個

スマホゲーム(Android版)を作成した時に行なった軽量化の方法です。

アプリサイズの軽量化(容量削減)と処理速度の軽量化(高速化)があるけど、ごっちゃに書いてます。とりあえず忘れないためのメモとして。

Unity5.3.xです。

指標

●アプリサイズ確認方法(Windows)
C:\Users\(username)\AppData\Local\Unity\Editor\Editor.log
ビルドすると使用ファイル1つ1つのサイズまで記録される。使ってないアセットや画像が入ってないかもチェック。

●実行速度など確認方法
デバッグ実行中にエディターのGameタブにあるStatsをクリック。ここに表示されるFPSなどで速度をチェック。あとSetPassを減らすのが高速化への道。マテリアルをまとめると減るらしい。

1.スカイボックスのサイズ縮小

使用したスカイボックスがモバイル用ではなかったので、テクスチャの設定で縮小しました。あと床はどうせ見えないので、床テクスチャを削除。

スカイボックスは2種類使っていて、それぞれテクスチャを6枚→5枚に減らし、4MB→1MBに縮小したので、合計48MB→10MB!(圧縮前サイズ)

容量的にこれがいちばん効果あった。まあ、そもそもモバイルでスカイボックス使うべきじゃないけど。

2.動かないオブジェクトをStaticにする

処理削減で高速化します。

3.画像サイズを4の倍数にする

これ最初知らなかった。4の倍数にしないと画像が圧縮されません。

4.画像をシーン毎にSprite Packerでまとめる

Sprite PackerはかつてPro版にしかなかった機能で、スプライトのグループを指定すれば自動でまとめてくれる便利なやつです。大量にある画像を1つずつちまちま読み込むような無駄がなくなります。

SetPassもこれで減ります。

5.画像のミップマップを生成しない

GUI用の画像はミップマップ生成すると画質がガタガタになっちゃうので。そして生成するとその分容量も増えちゃうので。

6.GameObject.Find()をキャッシュする

Find()関数は重たいので、Update()の中でいちいちFind()呼ぶのは良くないみたい。なのであらかじめStart()の中でFind()して、その結果を変数に入れて(キャッシュして)、それをUpdate()で使います。

GetCommpornent()関数も重いらしいけど、今回はキャッシュしなかった。

7.フレームレートを30fpsにする

うちの古いノートPCだとフレームレート自動にしたらファンが唸りだすので、スマホでもフレームレート落としたほうがバッテリー節約されるはず。

Application.targetFrameRate = 30;

なんか自動のままの方がバッテリーに優しいと書いてる記事も見かけたけど気にしない。

8.解像度を下げる

スマホでキャプチャ撮ったら画像でかくてびびった。解像度が高ければその分描画処理も重くなるので、見栄えに影響ない程度に解像度を下げました。

具体的にはuGUIのCanvasとScreen.SetResolution()の両方とも1280×720にした。

9.影はハードシャドウを使う

ソフトシャドウよりハードシャドウの方が軽いです。

影は他にもShadow Resolution(解像度)やShadow Distance(距離)など影響ありそうなパラメータが多いです。

10.ベイク

ベイクすれば影の処理をゴッソリ軽減できるけど、今回のゲームはマップ自動生成なので使えず。ただ意外とベイクは容量食う。

11.SSAO使わない

うっかり使っちゃったのは俺だけか……結構解決するのに時間かかったんだけどね。

まとめ

やること多くて大変だ。たぶん他にももっとあるはず。

以下は公式から(2021/8/3)
モバイルゲームのパフォーマンスを最適化しよう:専門家が語るグラフィックスとアセットに関するヒント

3D迷路を探索するスマホゲームを公開!

03だいぶ時間かかりましたが、ようやくスマホゲームが完成したので、公開しました。

ゲーム内容は動画を上げたので見てみて下さい。迷路をひたすら走る、シンプルなゲームです。

プレイ動画

開発経緯

おととしくらいからちまちまUnityを触っていて、横スクロールのアクションゲームがカタチになりつつありました。その頃の開発状況はこちら。しかし、何人かの知り合いに見せたところ、なぜかみんな「スーパーマリオ?」とか言うので作るの止めたw

そんな訳で他のジャンルのゲームを作ることに。色々考えて3D迷路に決めました。簡単そうだし。 ……簡単じゃなかったけどね。

ゲーム開発はもちろん、アプリを公開する手続きがよくわからず何度もビルドし直したり、プレイ動画を作成してYouTubeに投稿したり、初めてのことが多くて結構時間かかっちゃいました。

ともかく

完成したので、よろしければプレイしてみて下さい。完全無料です。

https://play.google.com/store/apps/details?id=com.yagasuri_games.rabbitmaze

Unityでスクリプトから画像を読み込んで表示する【uGUI】

Unityで画像を表示するのは
GameObject>UI>Image
で簡単にできます。

ただ必要な画像を全部シーンに置いて行ったら邪魔になるので、C#で動的に作成してみようかなと。ちょっと手間取ったのでメモ。

Unity 5.3使ってます。

まずは器のゲームオブジェクトを作成。引数はオブジェクト名。

GameObject work_image = new GameObject("WorkImage");

作ったゲームオブジェクトをCanvasの子にします。これしないと表示されない。

work_image.transform.parent = GameObject.Find("Canvas").transform;

画像の位置(アンカーポジション)を追加して画面の真ん中にします。

work_image.AddComponent<RectTransform>().anchoredPosition = new Vector3(0, 0, 0);

縮尺がおかしいのでちゃんと等倍にする。

work_image.GetComponent<RectTransform>().localScale = new Vector3(1, 1, 1);

スプライト画像追加。ここではResourcesフォルダにあるcounterファイルから読み込み。ちょっと横着したけど、これ本当はスライスしたスプライトの塊なので、Resources.LoadAll()で中身全部取得してから、counter_0を追加ってやった方が良いね。

work_image.AddComponent<Image>().sprite = Resources.Load<Sprite>("counter");

アスペクト比は元の画像の比率を維持。

work_image.GetComponent<Image>().preserveAspect = true;

画像のサイズを元画像と同じサイズにする。

work_image.GetComponent<Image>().SetNativeSize();

これで画面の真ん中に画像(数字の0)が表示されました。ここまでできれば、後は普通に使えるね。

Unityでスマホゲーを作るために試行錯誤中

スマホゲーム開発前々からやると言ってたゲーム開発、ちまちまと進めてます。

ゲームエンジンはUnity。言語はC#。個人開発でマルチプラットフォームとか考えると、他に選択肢ないもんね。

プラットフォームはAndroid。iOSはMac持ってないから作れないし。

ジャンルは横スクロールアクションゲーム。昔DirectXで作っていたゲームのリベンジです。

現在の進捗

最初はレベルエディタで地形を作ってみたけど、手持ちのスマホでは重すぎてカクカクしちゃったんで、今はTile Toolというアセットで組んでます。

キャラクタはBlenderで自作しようと思ったけど、上手くいかないので、これもアセットに頼ろうかなと。

操作はMobile Single Stick Control Rigというバーチャルジョイスティックで。簡単でいいねこれ。ただ操作系はそのうち見直すつもり。

キャラクタの当たり判定はRigidbodyでやってたけど、なんか当たりがガタつくのでCharacterControllerを使うことにした。でもCharacterControllerは物理演算に対応してないようなので、そのうち苦労しそう。あと重い。フレームレート落ちた。

スマホだとリアルタイム影が表示できないので、ライトマップで焼き込もうとしたけど、なんか色がおかしくなるだけで焼けない……要調査。

敵キャラや障害物などの挙動はこれから。これが一番時間かかりそうだけどね。

そんな感じで

今のところ、マップを左右に動いてジャンプするくらいしか出来てないけど、とっかかり自体は出来たので、何とか開発続けていきます。