What's This?

このブログは不定期に更新されるゲーム製作アラカルトのメモ帳です。
記事は以下のカテゴリーに分類されてます。(クリックで記事一覧表示)

全てのソースコードのライセンスについてはこちら

書いてる人→@eiki_okuma

 

物事のパッケージング - 自己満足が争いを生む本当の理由

f:id:eiki_okuma:20181101211103j:plain

 こんな記事が先週話題になっていた。

 流し読みすると一見よくある「妻の言うことを聞いてばかりでも不満が溜まっていくだけだった!」みたいな内容なのだが、実は本質はまったく別の所にある。その正体は、現代社会において度々発生する物事のパッケージング問題だ。たとえば、以下のようなケースをよく耳にしないだろうか。

  • 自分は率先して家事をやったのに、妻の小言が増える一方だった。(今回のケース)
  • 積極的に育児に関わってきたはずなのに、妻からはそう思われていない。それどころか、子供も妻に懐いている。
  • 先陣を切って精力的に仕事をやったのに、上司や同僚からの評価が低い。あいつらはちゃんと俺を見ていない。
  • 閑散期に深夜まで残っているプログラマーがいる一方で、定時に帰宅しているプログラマーもいる。しかも、前者の方が優秀プログラマーなのに。
  • 彼はよく家事を手伝ってくれるけど、どうも思いやりが足りない。(逆のケース)
  • あのディレクター、対外的に偉そうなこと言ってるけど、現場では迷惑な言動ばかりでプロジェクトがめちゃくちゃだ。(逆のケース)

 これらは全て、当事者間の物事のパッケージングが上手く擦り合わさってないことに起因する。あらゆる現代人を悩ませるこの物事のパッケージング問題とは何か、詳しく説明していく。

続きを読む

【Unity】iOS / Android でレビューを促す。(2018年10月版)

 f:id:eiki_okuma:20181022194328p:plain

 ちょっと目を離してる隙にどんどん仕様が変わっていくよ!!

iOS

if ( !UnityEngine.iOS.Device.RequestStoreReview() )
{
	yield return Ask();        // レビューするかどうか聞く
	if ( answer == 0 ) { 
		string url = "itms-apps://itunes.apple.com/jp/app/idXXXXXXXX?mt=8&action=write-review";
		Application.OpenURL(url);
	}
}

 「XXXXXXXX」はアプリごとに変える部分。(AppStoreのURLより)
 iOSは10.3から専用のネイティブダイアログが強制されるようになったが、全ての端末が10.3以上であるとは限らないので、 RequestStoreReview() で分岐する必要がある。このネイティブダイアログは「レビューしてください!→☆☆☆☆☆ OK/キャンセル」というものなので、これが使える場合はレビューするかどうか聞く必要はない。

 false が返ってくる場合は未対応端末なので、アプリ側でレビューするかどうかを聞く。

RequestStoreReview()の諸注意
  • 呼び出した後、出てくるかどうかは OS 側で調整する。例えば、前回「いいえ」を押した場合はしばらく出てこなくなる。この設定はユーザ側も変えられる。
  • 故に会話中にダイアログを出したい場合、文言に気をつけないと不自然になる。
  • 戻り値は「レビューしたかどうか」には関係ない。
  • Apple 側の想定としては、ゲームの合間に適当に何回も呼んでね! という感じだと思われる。

 

Android

yield return Ask();        // レビューするかどうか聞く
if ( answer == 0 ) { 
	Application.OpenURL( "market://details?id=XXXXXXXX" );
}

 Android はシンプルに URL を開くだけ。「XXXXXXXX」はアプリごとに変える部分。(パッケージのID - com.illucalab.ham など)

 

まとめると

#if UNITY_IOS
if ( !UnityEngine.iOS.Device.RequestStoreReview() )
#endif
{
	yield return Ask();        // レビューするかどうか聞く
	if ( answer == 0 ) {
#if UNITY_IOS
		string url = "itms-apps://itunes.apple.com/jp/app/idXXXXXXXX?mt=8&action=write-review";
#else
		string url = "market://details?id=XXXXXXXX";
#endif
		Application.OpenURL(url);
	}
}

 

文言について

  • 前述の通り、iOS は前後の文言に気をつけること。というか会話や説明の合間に出すことを推奨されていない。多分。
  • iOS は「☆5にして!」という文言はガイドライン違反。Android はOK。
  • 両 OS 共「レートしたかどうか」を取得することはできない。
  • 英語では「Rate this game!」という表現になるので、UI で英語を使いたい場合は注意。「Review」は「審査」に近い意味合いになる。

 

スパイダーマン(PS4)寸感

 ビルの合間を猛スピードで移動するスパイダーマンの姿を映画館で見て、魅力を感じなかった少年はいないだろう。テレビゲームの飛躍的な進歩はハリウッド渾身の絵作りに少しずつ近づいてはいたが、それは PS4 版でとうとう臨界点を超えた

  手放しで褒めてもいい出来なのだが、それはあまりにも多くの人がやっているので、一つ一つ要素を紐解きながら最新 AAA ゲームのベンチマークとして少し紐解いてみたい。

 まあ、結論から言うと「買え」ってことなのだが。

 

続きを読む

Google play game services の Saved game を Unity から使う。

f:id:eiki_okuma:20180929105308p:plain

資料が少なすぎる。

ので書きます。

マトモな解説資料ここくらい?↓
https://answers.unity.com/questions/894995/how-to-saveload-with-google-play-services.html

 

Saved games って何?

 Android のグーグルプレイには AppStore における Game Center のように Google play game services (GPGs) というものがあり、そのうち一つの機能に Saved game というモノがある。いわゆるクラウドセーブで、どの端末でも同じ所から始められるようにする、というコンセプトらしい。

 アイテム課金を扱うならクラウドセーブは必須だし、あるなら利用しましょうってことで使ってみることにした……が、資料(特に日本語記事)が少ない! ので今回の実装をまとめておく。

 

準備

 準備の各項目はググれば出てくるので詳細説明なし。

  1. GPGs を Unity に組み込む。
  2. GooglePlayConsole からゲームサービスを選び、アプリを紐付け。保存済みゲームを ONにする。
  3. Android でアプリを起動し、GPGs が正常に読み込まれていることを確認する。(内部テストなどで Google Play から直接ダウンロードしないと認証されないっぽい)
続きを読む

【Unity】シーンカメラの位置をセーブ&ロード

意外と知られていなさそうな、シーンビューのカメラの位置をセーブ&ロードする方法。製作時の見た目の調整ならゲームカメラを使えばよいが、製作過程の記録などに役立つ……かも。

ポイントは lastActiveSceneView の camera ではなく pivot を使う所。camera を使うと、ロード時に上手くいかない。

 

using UnityEditor;

static Vector3 mCameraPos = Vector3.zero;
static Quaternion mCameraRot = Quaternion.identity;

[MenuItem("配置ツール/カメラ位置をセーブ",false , 10)]
static void SaveCameraPos()
{
	mCameraPos = SceneView.lastActiveSceneView.pivot;
	mCameraRot = SceneView.lastActiveSceneView.rotation;
}

[MenuItem("配置ツール/カメラ位置をロード",false , 11)]
static void LoadCameraPos()
{
	SceneView.lastActiveSceneView.pivot		= mCameraPos;
	SceneView.lastActiveSceneView.rotation	= mCameraRot;
	SceneView.lastActiveSceneView.Repaint();
}

MPを守る方法・社会人編

 f:id:eiki_okuma:20170718181533j:plain

 人には、HPMPがある。ゲームの話ではない。現実の話だ。
 朝起きたり、モノを運んだり、長時間歩いたり、そういうことを担うのはHPであり、体力だ。一方で仕事の能率を増したり、モノを考えたり、精力的に副業を行ったりするのに必要なのはMPであり、精神力である。

 現代社会において、MPを磨耗する手段はあまりにも多い。上司や人間関係、通勤の満員電車、じめじめした天候や気温・気圧の変化、免許の更新や役所での手続きなどの事務作業、身内の不幸など、ありとあらゆる日常の事象が人々の精神を蝕んでいく。

 f:id:eiki_okuma:20180703143649p:plain

 しかし、人が人として生活を豊かにするには、MP必要不可欠だ。創作活動を行ったり、旅行に行ったり、勉強をして資格を取ったり、投資を学んだり、ゲームの大会に出たり、ブログやSNSで情報を発信したり、バイタリティ溢れる活動はきっとあなたの人生を楽しくさせてくれるし、そのこと自体があなたのMPを回復する好循環を生むだろう。

 社会人よ、MPを守れ。社会人*1でありながら創作活動をなんとか維持してきたぼくが自分なりに見つけた方法論をここにいくつか記すので、いくらかの助けになれば幸いである。

 

*1:だった頃

続きを読む