ページ

2013年11月23日土曜日

実際にPhotonCloudを使ってみる~基本編②~

最近PhotonCloudに動きがあったそうで、何やら新しいサービスが開始されるそうです。
この講座が無意味になるような内容じゃなかったら良いのですが・・・。

それでは、前回に引き続き基本編です。
今回のテーマは可視化。
色んな物が見えるようにしてみましょう。

前回の「lobbyMain.cs」 にGUILayoutを追記します。

「lobbyMain.cs」

public class lobbyMain : Photon.MonoBehaviour {

<省略>

void OnGUI(){

GUILayout.Label( PhotonNetwork.connectionStateDetailed.ToString() );

}


}
実行してみましょう。
左上に何やら文字列が表示されましたね?
これが現在のネットワーク接続状況です。
「Joined」と表示されれば無事にルームへと入室できたことが分かります。

◆PhotonNetwork.connectionStateDetailed
現在の接続状況を返してくれる。
デバッグ的に画面に表示させる他、接続が完了するまでは処理をしない、
といった条件判断にも活用できる。


続きまして、ネットワークゲームなので操作できるキャラクターが欲しいところですね。
ということで、

・プレイヤーがルームに入室すると、そのプレイヤーのキャラクターを画面に表示する

部分をまず作ってみたいと思います。


①プレファブの設定

キューブでもスフィアでもなんでもいいので、ヒエラルキーから追加します。
名前を適当に変更します。
この場合は「playerObj」としました。

photon viewというスクリプトをアタッチします。
これは検索で出すもよし、Add ComponentからMiscellaneousを辿って追加することもできます。

それをプロジェクトのResourcesフォルダ内にドラッグし、プレハブを作成した後、ヒエラルキーに残ったオブジェクトを削除します。




②スクリプトの設定

「lobbyMain.cs」に以下のように追記します。

「lobbyMain.cs」

public class lobbyMain : Photon.MonoBehaviour {

<省略>

//ルームに入室したときに自動で実行される
void OnJoinedRoom(){

Vector3 createPos = Vector3.zero;
createPos.x = PhotonNetwork.room.playerCount * 1.5f;
PhotonNetwork.Instantiate("playerObj",createPos,Quaternion.identity,0);

}

void OnGUI(){

GUILayout.Label( PhotonNetwork.connectionStateDetailed.ToString() );

}

}
ウェブプレイヤー辺りで書き出し、 多重起動してみましょう。
以下のようになれば成功です。




窓を増やせば増やすほど、ボックスが増えていきますね。
このボックスがそれぞれのプレイヤーです。

スクリプトの解説ですが、上から
  1. createPosという原点を格納した変数を作成
  2. createPosのx座標を現在のプレイヤー数×1.5に設定
    ※オブジェクトが重なるのを避けるため
  3. ネットワーク上にオブジェクトを作成
という流れになっています。

◆PhotonNetwork.room.playerCount
現在自分がいるルームに何人プレイヤーがいるかを取得

◆PhotonNetwork.Instantiate
Instantiateをルームに入室している全てのプレイヤーで実行させるようなもの。
この命令で作成されたオブジェクトをオンラインで同期することができる。


今回はここまでです。
次回はこのオブジェクトを動かし、その動きをネットワークで同期します。

何かおかしいところがありましたら、是非お教え下さい。

2013年11月13日水曜日

200時間働いたのに時給26円になってしまった話【アプリ収支報告】



私のスマホアプリ第一弾となったペタリーですが、発表から約二ヶ月が経ちました。
DL数や収益も落ち着いてきましたので、ここを区切りとして成果報告をしたいと思います。

何をどうすればどうなるか、という参考になれば幸いです。

ではまずぶっちゃけデータから。

DL数 : 2,930
収益 : \5,187
掲載サイト数 : 4サイト(こちらから申請したものは3)
製作時間 : 約200時間
時給換算 : 約26円

わーお、ブラック起業も裸足で逃げ出しちゃうぜ!
続いて、収益方法と宣伝方法についてご紹介します。

◆収益方法
アプリ内の体力回復アイテム販売
appCを使った成果報酬型広告

◆宣伝方法
facebook, twitterでの告知
レビューサイトへのレビュー依頼


まず今回の出発点はほとんどUnityが分からないという状態でした。
ひよこが描かれた見るからに初心者向けの参考書を片手に制作しています。
そのため、開発のノウハウが無いばかりか、そもそもスマホ市場がどのようなものかすらあまり理解していなかったことが最大の反省です。
 (とはいえ、やらなければノウハウも獲得できないので、反省しつつも手法は正しいと思っています)

もう一つ、このデータからみて大きな反省は、DL数の少なさですね。
広告による収益を主とするなら、DL数はこの100倍は欲しいところです。
appC単体の利益が3800円程度なので、30万ちょっとぐらいは稼げていたかもしれません。

では何故流行らなかったのか、ということについて考える必要があります。
私なりに思うのは、
  1. 初見でゲーム内容が伝わりにくかった
  2. ゲーム内にSNS連携機能を持たせていなかった
  3. 広告宣伝不足
1と2について、現状広告によって利益を出しているゲームはカジュアルゲームが非常に多いです。
すぐに理解できて手軽にプレイできるから、とりあえずやってみようと思えるのではないかなぁと。
内容がよくわからないのでは、プレイするまでいかないということかもしれません。
またこれはレビューする側もそうで、わかりやすいゲームの方がレビューもしやすいのでしょうね。

3について、もうこれは資金不足としか言えないですね。
炎上覚悟でばらまくという手法もありはするんでしょうが、まだそこまで落ちたくないです。


次に、今回の客単価についてです。
純粋にDL数から考えるなら、一人あたりの単価は1円ちょっとです。
あまりよろしくないというか、むしろアウトーです。
何故こういう状態になったのか、考えてみます。
  1. ゲーム性と収益方法のミスマッチ
  2. 広告表示までのタイムラグ
  3. バグ多すぎ
1について、ペタリーはもはやカジュアルゲームという枠から外れています。
主観では全然カジュアルだろと思っていたんですが、そんなことなかったようです。
アーマードコアをやっているとその辺りの感覚が鈍るので注意です。

ただ問題はカジュアルかそうではないか、ということではなく、ペタリーが即座に面白さがわかるタイプのゲームではないことにあります。
即ち、ちょっとプレイしてつまらんからアンインストールするわけですね。
長く遊ばせることが広告収益をあげる一つの方法でありますから、これは宜しくありません。

GooglePlayのレビューの通り、バグに対する文句こそあれ、ゲームとしての文句はほぼありませんので、途中までは無料で、それ以降は有料になるような収益方法の方が良かったのかもしれません。
面白さが分かったユーザーをターゲットにする感じですね。

 2と3について、これは開発力不足ですね。
ゲームが重たいみたいで、広告が表示されるまで少しラグがあったり、場合によっては表示されなかったこともあります。
あとバグですね。
レビューでも散々言われているんですが、そのどれもが再現できなくて原因不明です。
強制終了とか一度も起きてないんですよね・・・。
うーん、端末固有のバグなのかなぁと考えているのですが、にしては多い気が。


では、まとめです。
今回の三代反省点は
  1. 開発力不足
  2. 収益方法のミスマッチ
  3. 宣伝不足(ゲームシステムと予算的な意味で)
かなと思います。
2については次回作にすぐ反映できそうですね。
1についても、うん、今回の制作でレベルが上がったと信じています。
問題は3ですね。
これは誰しもが抱える問題かと思いますが、宣伝なぁー・・・これどうしたらいいんでしょう。


余談ですが、Unityのアセットとレビュー掲載費で1万ぐらい使っているので、時給26円どころか赤字です。
以上、誰かの参考になれば良いのですが・・・

2013年11月9日土曜日

実際にPhotonCloudを使ってみる~基本編①~

それでは今回から、実際のスクリプティングについて解説しようと思います。
誰かのお役に立てれば良いのですが・・・。

なお、解説は全てC#で行います。
悪いことは言わないので、こういう外部のプラグイン的な物を使うときはC#が良いです。
JSだとPhotonCloudのファイルをPluginフォルダに移動したり、ところどころ書き換える必要があるっぽいので。

さて、以前の記事にPhotonCloudについての流れが書いてありますね。
この1~7に沿って実際の構文を記します。


1.ゲームにログイン

 処理的には
  • ゲームロビー(PhotonCloud)への接続
を指します。

「lobbyMain.cs」

public class lobbyMain : Photon.MonoBehaviour {

void Start () {
  
PhotonNetwork.ConnectUsingSettings("0.1");

}

}

以上です。簡単ですね。
これを適当なゲームオブジェクトに追加してあげれば大丈夫です。
ポイントはMonoBehaviourにPhotonを継承して、Photon.MonoBeheviourとすること。
継承って何なのかよくわからないんですが、Photonというクラスで定義された関数やらを使えるようにすること、みたいです。

◆ConnectUsingSettings("0.1")
「0.1」という文字列のロビーに接続する、みたいなイメージです。
使い方としては、ゲームのバージョンアップの際など、新旧のアプリケーションが同じロビーに接続するとまずい時などに使います。
一例ですが、ここを「0.2」にすると、同じ「0.2」と定義されたアプリケーションが同じロビーへと接続されます。


2.好きな部屋を選ぶか、自分で部屋を作って入室

処理的には
  • 現在募集中のルームを検索して、存在すれば入室
  • なければ自分で作成して入室
となります。

「lobbyMain.cs」

public class lobbyMain : Photon.MonoBehaviour {

void Start () {
  
PhotonNetwork.ConnectUsingSettings("0.1");

}

//ロビーに入室した後に自動的に実行される
void OnJoinedLobby(){

PhotonNetwork.JoinRandomRoom();

}

//RandomJoinが失敗したとき(ルームが存在しなかったとき)に自動で実行される
void OnPhotonRandomJoinFailed(){

PhotonNetwork.CreateRoom("testRoom");

}

}

先ほどのスクリプトに追記しました。
OnJoinedLobbyやOnPhotonRandomJoinFaildに関しては、コメント行がそのまま説明です。
詳しいことは分かりませんが、そういうものだと理解してください。
なぁに、車の構造を知らなくても運転は出来るんですよ。私免許持ってないですが。

◆JoinRandomRoom()
存在する部屋を検索し、そのどれかに入室するという意味です。

◆CreateRoom("testRoom")
「testRoom」という名前の部屋を作成し、入室するという意味です。
部屋の名前は重複せず、検索のキーにもなります。


絵的に何の変化も無いのでわかりにくいですが、一応これだけで複数のプレイヤーが同じルームに打ち込まれる処理が完成しました。

次回はもうちょっと絵的に分かりやすくして、条件設定をしてみましょう。

おかしいところがありましたら、何卒ご教示ください。

2013年11月1日金曜日

実際にPhotonCloudを使ってみる~導入編①~

それでは今回から、PhotonCloudを実際にUnityで扱う方法についてお話したいと思います。

まずは導入編。
どこで何をどうするのかについてです。


①PhotonCloud公式からユーザー登録をする
http://cloud-jp.exitgames.com/ こちらからどうぞ
何はともあれユーザー登録です。
登録は特に難しいところもないので割愛しますね。


②UnityへPhotonCloudを導入する
アセットストアにて「photon」 と検索すると以下のようなアセットが見つかりますので、これをUnityへ読み込みます。
 

 
③ PhotonCloudの公式サイトへログインし、AppIDをコピーする


④UnityへPhotonCloudをインポートすると表示される画面からsetupをクリック

後、先ほどのAppIDを入力し、CloudRegionからJapanを選択



このウインドウを閉じ、とりあえずは導入完了です。
PhotonCloudはデフォルトだと同時20接続まで無料です。
ですので、この状態でも開発上でのテストは十分行えますね。

次回はスクリプティングの基礎から行います。


例によって、何かおかしいところがありましたら、是非ご教示ください。