投稿者「moku」のアーカイブ

moku について

iPhone, iPad & Android アプリを開発している mokuApps です。

Galaxy Blocks

タップでブロックを消しまくれ!
世界中のライバル達とハイスコアを競おう!!

・ハイスコアのコツ
1.ブロックを素早く消し続ける
素早くブロックを消し続けるとコンボになってハイスコアのチャンス!
コンボボーナスで獲得スコアが2倍、3倍とどんどん増えるぞ。
だけどコンボの表示がされている間に次のブロックを消さないとコンボ消失だから注意しよう。

2.同じ色のブロックを連続で消す
同じ色のブロックを続けて消すと追加コンボが発生!
連続コンボと掛け合わせて、どんどんハイスコアが伸びるぞ!!
ぱっと見で数の多い色から狙っていこう!

3.アップグレード
ゲームをしたりボーナスで獲得したポイントでアップグレード!
よりハイスコアを目指せるようになるぞ!!

App Store Android app on Google Play

Panels of the Dead

Welcome to the world of Panels of the Dead!
Experience the fear of the approaching zombies!

This game is a panel tap type puzzle game.
The goal is to defeat the zombies while paying attention to life and water and survive for as long as possible.

– Strategy by choosing weapons
Normally you consume life to defeat zombies by knife.
By acquiring ammo, you can defeat zombies by handgun without consuming life.
You can also use a machine gun or a grenade to strike horde of zombies.

– Change in visibility due to the passage of time in the game
Every time you tap a panel or use a weapon, the time in the game elapses.
Visibility gets worse at night, and distant panels become invisible.
You need a strategy like keeping supplies in the daytime, just like a zombie drama.

– Upgrade by points acquired
When the game is over, you can acquire points according to the time you survived and the number of defeated zombies.
You can use that point to increase the maximum value of life and water, gain skills, and be able to play the next game advantageously.

– Skills
Life, water, weapon enhancements and the other 4 categories a total of 41 kinds of skills are available.
Since the number of slots where skills can be set is limited, try searching for the strongest combination of yourself.

– Achievements
There are more than 300 achievements in 32 types, and you can earn bonus points by achieving it.

* As you upgrade it takes a long time for one game , but you can interrupt it at any time during the game and resume from the interruption data next time.

App Store Android app on Google Play

パネルズ・オブ・ザ・デッド

パネルズ・オブ・ザ・デッドの世界へようこそ!
迫りくるゾンビの恐怖をお楽しみください!

本作はパネルタップ方式のパズルゲームです。
ライフと水分に注意しながらゾンビを倒し、できるだけ長く生き延びるのが目的です。

・武器の選択による戦略性
通常はナイフによりライフを消費してゾンビを倒します。
弾薬を獲得するとハンドガンによって、ライフを消費せずにゾンビを倒すことができます。
またマシンガンやグレネードでゾンビを一網打尽にすることもできます。

・ゲーム内の時間経過による視界の変化
パネルをタップしたり武器を使用するたびにゲーム内の時間が経過します。
夜になると視界が悪くなり、遠くのパネルが見えなくなります。
昼の内に物資を確保しておくなど、ゾンビドラマさながらの戦略が必要になります。

・獲得したポイントによりアップグレード
ゲームオーバーになると、生き延びた時間や倒したゾンビの数に応じてポイントが獲得できます。
そのポイントを使用してライフや水分の最大値を増やしたりスキルを獲得して、次のゲームを有利に進めることができるようになります。

・スキル
ライフ・水分・武器の強化やその他の4カテゴリ計41種類のスキルが用意されています。
スキルをセットできるスロットの数は限られていますので、自分だけの最強の組み合わせを探してみましょう。

・達成項目
32種類・合計300段階以上の達成項目があり、達成することでボーナスポイントを獲得できます。

※ アップグレードしていくと1ゲームにかかる時間が長くなってしまいますが、ゲーム中はいつでも中断して、次回に中断データから再開していただくことができます。

App Store Android app on Google Play

[Unity]:MonoBehaviour.OnApplicationPause()の挙動

[検証バージョン]
Unity 5.1.2p2
iOSシミュレータ 8.4
Android Genymotion 4.2.2 API 17

アプリがバックグラウンドに入った時・および復帰した時の処理を記述するMonoBehaviour.OnApplicationPause()

この中に記述する処理が重く時間がかかり途中でアプリが強制終了された場合、どのような挙動になるのか検証してみた。

・検証方法
OnApplicationPauseでバックグラウンド退避時の処理中に数秒待機してデバッグプリントを行う。

using UnityEngine;

public class GameController : MonoBehaviour {
	void OnApplicationPause(bool isPause) {
		if (isPause) {
			Debug.Log("OnApplicationPause()");
			System.Threading.Thread.Sleep(3000);
			Debug.Log("3 seconds lator..");
		}
	}
}

・iOSの場合
アプリ起動中にホームボタン2度押し→アプリを終了

-> applicationWillResignActive()
OnApplicationPause()
3 seconds lator..
-> applicationDidEnterBackground()
-> applicationWillTerminate()

ちゃんと3秒後にデバッグプリントされた後に、バックグラウンド→終了となっている。

ただし、OnApplicationPauseをコルーチンにした場合はバックグラウンドに入った時点で処理が一時停止してしまうので注意が必要。

・Androidの場合
ハードウェアボタンでアプリの一覧を表示→アプリを終了

OnApplicationPause()のデバッグプリントのみで、処理は途中で中断されてしまった?

Androidの場合は、OnApplicationPause()での処理には注意が必要みたい。

[Unity, NGUI]:スクロールビューにスクロールバーを追加する

[検証バージョン]
Unity 5.1.2p2
NGUI 3.9.1

スクロールビューの基本についてはこちらをどうぞ。

1.スクロールバーの背景となる部分とつまみの部分、計2つのスプライトを作成。
スクロールバーのスプライトを追加

ヒエラルキー上での配置はスクロールビューの配下以外であればどこでも大丈夫。

垂直方向のスクロールバーの場合は2つのスプライトの高さを合わせておく必要がある。
見た目的につまみ部分が前面に表示されるようにDepthの設定もお忘れなく。

2.スプライトにコライダーを設定
スクロールバーの背景部分をクリックして移動する機能が必要なければ、背景用のスプライトにはコライダーを設定しなくても大丈夫。
コライダーの設定は目的のスプライトを選択した状態で、メニューバーから「NGUI」-「Attach」-「Collider」とするのが簡単。

3.適当なオブジェクトにUIScrollBarコンポーネントを追加
UIScrollBar

UIScrollBarコンポーネント用にNGUI Widgetを作ってその配下に先ほど作成したスプライトを配置しておくのが綺麗だと思う。
目的のオブジェクトを選択した状態でメニューバーから「NGUI」-「Attach」-「Scroll Bar Script」。

UIWidgetではなく適当なオブジェクトでも大丈夫だが、UIScrollView自体にUIScrollBarコンポーネントを追加するとスクロールバーの挙動がおかしくなる。

4.UIScrollBarの設定
UIScrollBarの設定

Foreground, Backgroundにそれぞれつまみ用・背景用のスプライトを設定。
Directionも適切に。

5.スクロールビューにスクロールバーを設定
UIScrollViewにスクロールバーを設定

スクロールビューのインスペクタにScroll Barsの項目があるので、Horizontal/Vertical目的の方にスクロールバーを設定。

ここで一度実行すると、UIScrollBarのValueなどの値が反映されるので、そこでスクロールバーの初期位置などを設定できる。
UIScrollBarの設定

Sizeが、スクロールビュー配下の全体サイズに対する表示範囲。スクロールビューに対して2倍のサイズのものを配置していれば0.5となる。
Valueがつまみの初期位置、0〜1。

[Unity, NGUI]:スクロールビューの基本

[検証バージョン]
Unity 5.1.2p2
NGUI 3.9.1

・基本的な考え方
ヒエラルキー上でスクロールビューの配下に配置されているUIをスクロールビューの範囲に限定して表示する。

スプライトがスクロールビュー配下にない場合

スプライトがスクロールビュー配下にない場合

スプライトがスクロールビュー配下にある場合

スプライトがスクロールビュー配下にある場合

またその名の通り、スクロールビュー配下に配置されたUIは、実行時にドラッグなどにより見える範囲を動かすことができる。

よくグリッドビューと組み合わせて紹介されることが多いが、グリッドビューはあくまで多数の項目を整列するだけのもので、スクロールビュー自体とは特に関係ない。

・作り方
UI Rootが存在する状態で、メニューバーから「NGUI」-「Create」-「Scroll View」を選択する。
作成されたScroll Viewの配下にUIを配置する。

ドラッグでスクロールさせたい場合は、配下のUIにコライダーとUIDragScrollViewを追加する。
コライダーの追加は目的のUIを選択した状態でメニューバーから「NGUI」-「Attach」-「Collider」とするのが簡単。
UIDragScrollViewの追加は目的のUIのインスペクタで「Add Component」-「NGUI」-「Interaction」-「Drag Scroll View」を選択。

スクロールビューのインスペクタでドラッグで動かせる方向などを指定できる。
スクロールビューのインスペクタ

Puzzle Mahjong

New sense Mahjong puzzle game!

PuzzleMahjong1 PuzzleMahjong2

Select 3 tiles from table with same suits & contiguous numbers(chow), or with exactly the same kind(pung).
After pung, select one more same tile, can make 4 tiles set(kong).

These (chow, pung and kong) are all called ‘set’.

Make ‘Yaku’ with 4 sets, and get score!

App Store Android app on Google Play

パズル麻雀

麻雀パイを使った新感覚パズルゲーム!

パズル麻雀1 パズル麻雀2

場から、同じ種類で数字の連続した3つの牌(順子)もしくは同一の牌を3つ(刻子)を選択して揃えます。
刻子の後にもう一個、同じ牌を選択すると、4個の組み(槓子)とすることが出来ます。

これらの牌の組み合わせ(順子・刻子・槓子)を合わせて面子と呼びます。

4つの面子で「役」を作ると得点となります。

App Store Android app on Google Play

[Unity, PlayMaker]:DontDestroyOnLoadの不具合

PlayMaker 1.7.8.2

アクションカテゴリ「Level」のアクション「DontDestroyOnLoad」で指定したGameObjectがシーンロード時に消えてしまいます。

DontDestroyOnLoadアクションのソースを見てみると…

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.

using System.Collections;
using UnityEngine;

namespace HutongGames.PlayMaker.Actions
{
	[ActionCategory(ActionCategory.Level)]
	[Tooltip("Makes the Game Object not be destroyed automatically when loading a new scene.")]
	public class DontDestroyOnLoad : FsmStateAction
	{
		[RequiredField]
        [Tooltip("GameObject to mark as DontDestroyOnLoad.")]
		public FsmOwnerDefault gameObject;

		public override void Reset()
		{
			gameObject = null;
		}

		public override void OnEnter()
		{
			// Have to get the root, since the game object will be destroyed if any of its parents are destroyed.
			
			Object.DontDestroyOnLoad(Owner.transform.root.gameObject);

			Finish();
		}
	}
}

せっかく引数で指定したgameObjectが指定されていません。
代わりにこのアクションを実行しているFSMを持つGameObjectがDontDestroyOnLoadになっているようです。

25行目を以下のように変更します。

			if (gameObject != null) Object.DontDestroyOnLoad(gameObject.GameObject.Value);

[Unity]:Unity5対応でハマった点

Unity4.5.5で作成した「あ〜ちゃ〜の大冒険」をUnity5対応する時にハマった点。

Unityバージョン4.5.5f1 -> 5.0.0p2

・シーン全体が暗くなった
アンビエントライトのせい。
メニュー「Window」-「Lighting」を開き調整する。

Unity5-lighting

・NavMeshAgentの挙動がおかしい
具体的には、あ〜ちゃ〜が一度立ち止まると、その後、移動しなくなる。
従来はNavMeshAgent.Stop()後にSetDestination()で座標を設定すると動いていたのだが、Resume()を呼び出す必要がある。