2016年4月3日日曜日

Back in 1995で使用しているUnityを使ったPS1風描画について

ジーパラドットコムさんでシシララ安藤さんとの対談記事シリーズ

『Back in 1995』一條貴彰”90年代のゲーム文化を楽しむムーブメントを日本からおこしたい”シシララ安藤武博のインディーズを見ずに死ねるか!

が完結しました。全4回です。

『Back in 1995』にかける思い、日本国内のクリエイターさんに対して思うこと、PSMについて、シンラについてなど、過去についても積極的に触れていくスタイルでぶっちゃけています。
ぜひご笑読ください。

安藤さんと対談して、「新しいフィールドに自らつっこんで切り開いていくスタイル」は自分とかなり共通しているなと思いました。そして彼はプロデューサー視点から、私は開発者視点から、ゲーム産業どげんかせんといかんと考えているようで、そこらへんうまくシメジーおいしいーとかにならないかなと画策しています。
 
また、私個人にとって安藤さんは「鈴木爆発」の人、というイメージがありまして、その思いも込めて例のゲームの序盤に登場する「みかん爆弾」をつかった"技術デモ"を持って行ったんですね。
二次創作行為をして当時のPに見せに行ったわけで、今考えるとバカ行為だった気もします。

さて、その技術デモが以下で、Back in 1995で無駄に培った初代PlayStation風描画の仕組みを端的に表現しているものです。
UnityのWebGLであっさりビルドできてしまったので、こちらからその実際のデモを試せます。マウスでつかんでぐりぐり動かせるのよ。


この「PS1風描画」ですが、やっていることは以下の3点です。

・ 頂点座標変換の精度を下げる
・ テクスチャのパースペクティブコレクションをオフにする
・ 内部的に低解像度描画を行う

初代PlayStationの座標変換は、固定小数点演算で行われています。(後づけ知識)
だから独特で味のある「ポリゴンのズレ」が出るんですね。

また、テクスチャのパースペクティブコレクションを切ることによって、ポリゴンがカメラに近づくと独特の「歪み」が出るようになります。
美しい。

実は「Back in 1995」を発表した当時、座標変換の精度を下げるところは完成しておらず、トレイラームービーでは「ポリゴンデータ側を壊してそれっぽく見せる」という荒行で対応しておりました。
非常に見栄えが悪くできたので、製品版にも採用しています。

そして忘れもしない1年前のUnite 2015 Tokyo。
本業をほっぽって「Unity相談コーナー」に出向き、高橋啓治郎さんに「Unityで描画精度を固定小数点演算にすることはできませんか?」というトンチキ質問をしたわけです。
「お前は何を言っているんだ」という顔で見られたのも良い思い出です。

冷ややかな目で見られながらも、技術的な助言はばっちりいただき、
まんまと精度をそれっぽく下げるシェーダーが完成しました。ありがとうございました。
高橋さんはその後、自らパッケージにまとめてGithubに成果をあげています。

Retro3D




3点目の「低解像度描画」ですが、これは猛烈に単純で、一回通常のカメラで描画した結果を低解像度なRenderTextureに書き込んでカメラの前に置いているだけです。
参考にTsubakiさんの記事を参考にしています。みんな大好きテラシュールブログ。

単にUnityの設定で低解像度にしたり、あるいは描画パイプライン上で直接何かする方式を取っていないのは、「さまざまなプラットフォームでの対応」 を想定しているからなんですね。
描画システム側に深いことをやるとマルチプラットフォームの時に固有の問題が起きそうだと思ったので、すごく単純な方法で実装しようという方針です。

さいわい描画負荷がかなり軽いゲームなので、こういう力技を使っても全く問題ありません。
(ふつうはRenderTextureは重い処理なので、、、)
 おかげで開発初期で利用していたPlayStation Mobile、すなわちPS Vitaでもしっかり動いていました。
覚えていろ地べたを這いどろ水をすすってでもPlayStation platformに戻って来てやる


あとブラウン管シェーダーというものも入れて、モニターの雰囲気を出しています。
[Unity3D]ブラウン管風シェーダーを作った  


そういうわけで、技術的にPS1風描画は割とすぐ試せるので、開発中のゲームでちょっとやってみたいなと思った人はぜひチャレンジしてみてください。


初代PS風の格ゲーやRPGを開発する同士よ、ぜひ!(アドベンチャーゲームは作らないでお願いTT)

2016年3月22日火曜日

UnityにSteamworksを導入する(Steamworks. NET)

こちらの記事はThe Knights Of Unityのブログ記事を許可をえて翻訳(抄訳)したものです。Thank you, Piotr!



UnityにSteamworksを導入する


開発者の多くはSteamへのゲームパブリッシングに興味があると思います。
SteamはPC、Mac、Linuxへゲームを配信できる素晴らしいプラットフォームですからね。

しかし、Steamはただの配信サイトではありません。
もしあなたがValveから許可を得ることができた場合は、ゲーム開発に役立つ様々な機能にアクセスすることができます。
それらは”Steamworks”と呼ばれています。

Steamworksの機能

・実績
あなたのゲームに「草の根マーケティング」の機会を提供します。(無料の口コミマーケティング?)プレイヤーが実績を解除すると、あなたのゲームについて彼らのフレンドが知る機会を提供することができます。

・エラーレポート
プレイヤー側でゲームがクラッシュした際のエラーを集めることができ、良く起きているエラーを素早く修正することができます。
簡単なAPIを呼ぶだけで、Steamはゲームプログラムのクラッシュレポートを自動的に集めてくれます。
エラーレポートはSteamworksの専用のページで確認することができます。

・クラウドセーブ
セーブデータを保存できる無料のクラウドストレージを提供します。(大きめの意訳)

・Steam Workshop
ユーザーが制作したコンテンツを保存、整理、ダウンロードが可能なシステムです。
これらはカスタムステージやスキンデータのほか、いわゆるMODの導入も簡単にすることができます。

このほかにも、統計データ、ランキング、マルチプレイヤーゲームのためのマッチメイキングなどの機能が提供されています。



(Greenlightやパブリッシャーを通じた契約などで開発者登録をし、)Steam SDKの規約にサインするとSteamWorksメンバーとなり、公式ドキュメントを読むことができます。

UnityにSteam Worksを導入する


Steamworks SDKはネイティブのDLLファイル(MacやLinuxの場合は.soファイル)で提供されています。
Unity開発で動作させる場合、C#から呼ぶことになりますので、何らかのバインディング処理を作る必要がありますが、その機能を提供するプロジェクトがすでにあります。

それたSteamworks.NETです。

これはMITライセンスのオープンソースラッパーで、商業利用も可能です。
.unitypackageファイルで提供されているので、Unityプロジェクトへのインストールは簡単です。

Steamworks.NETのいいところは、作者が互換性とシンプルさに重きを置いているところです。
これはつまり、公式のドキュメントの使用法とほぼ変わらない使い方でC#から関数を呼ぶことができるということです。
欠点としてはコールバックの設定にひと手間必要になるということですが、あまり問題ではありません。(翻訳不安個所)

実際の導入

Steamworks.NETを動作させるためには、Steamworksの開発者であること、AppID(Steamのデータベースに乗るプロダクトID)が必要です。
これはSteam Greenlightを通過すれば、Valveから入手することができます。
(翻訳者の場合はパブリッシャーを通しました)

AppIDを入手したら、まずはSteamworks.NETの.unitypackageをインポートしましょう。
この記事の執筆時点ではVersion7.0.0が安定版として提供されていますが、ドキュメントのInstallationページを必ず参照するようにして下さい。

Steamworks.NETのパッケージはWindows, Mac, Linuxそれぞれのx86,x86_64版が提供れています。
このパッケージさえインポートすれば、そのあとは何もプロジェクトに加える必要はありません。
さらに、公式のSteam DLL/soファイルが含まれているので、次の2ステップを行うだけで利用できます。

パッケージをインポートしたら、プロジェクトのルートディレクトリに作成されているsteam_appid.txtを開きます。(AssetsやLibraryを含む階層です)
開くと「480」とだけ書かれていますが、これをあなたのAppIDに置き換えます。

さあ、最後のステップです― 任意のSceneに空のGameObjectを作成し、SteamManager.csをアタッチしましょう。ほら!もう準備完了です!
(注 – ご想像の通りこのコンポーネントはシーンをまたいで生存させるため、DontDestoryOnLoad(this.gameObject)の処理を行っています。また、Managerクラスによくある、SteamManager.Instanceにインスタンスへの参照を持つ方法なので、何か別のコンポーネントと混ぜないほうが良いと思います。)

動作チェック

Steamクライアントを起動して、下記のスクリプトを作成してください。
using UnityEngine;
using Steamworks;

public class SteamScript : MonoBehaviour {
    void Start() {
        if(SteamManager.Initialized) {
            string name = SteamFriends.GetPersonaName();
            Debug.Log(name);
        }
    }
}


このスクリプトを新規のGameObjectとしてSceneに配置して「Play」を押してみましょう。
問題がなければ、Steam上のあなたのユーザー名がUnityEditorのコンソールに表示されるはずです

もしエラーが表示されてうまくいかない場合、何がミスっているのかをうまく読み取れないと思います。もしWindows環境で開発している場合は、MicrosoftのDebugViewアプリケーションを使ってみてください。Unityのゲームを実行する前にこのアプリケーションを起動し、エラーが出た後にalt+tabを押してDebugViewに切り替え、エラーの内容を確認してください。

さらなる情報とヘルプ
この後の使い方や、どのようにコールバックをハンドリングすべきかなどは、Steamworks.NETのドキュメント内でGetting Started ページを参照してください。不明点があった場合は、SteamworksDevディスカッショングループで聞いてみてください。このグループは招待制ですので、Steamにその旨問い合わせてください。それだけの価値がありますよ!

-----------------------------
というわけで、Steamworks SDKのUnityタイトルでの使い方の日本語情報があまりにもなかったので、一番わかりやすかった導入記事を参考に自分でやってみて、
ついでに翻訳記事を作りました。

ぶっちゃけ日本だとまだまだSteamに向けての個人開発者のタイトルリリース数は少ないと思うのですが、個人的にどんどん増えてほしいので参考になれば。



2015年9月26日土曜日

[Unity]データセーブ支援&暗号化アセットPerlib


レジストリぶっこみマンで有名なPlayerPrefsに代わるセーブシステムは色々あるが、シンプルさ優先でPerlibを購入・使ってみた。


2016/3/22: 追記
削除されていました。oh....


Perlib - Unity Asset Store

↑にアクセスするとパブリッシャー名はUnity Sucksになっているわ、サポートへのリンクはUEのトップページになっているわで悲惨な状態に....
代替アセットを探すか、自前でxml読み書きするクラス作らんとですわ。

指定のフォルダに暗号化したセーブデータとファイルを書きだす。
暗号化キーはサンプルそのままだとアレなので皆はアレしような。

セーブデータを生成してSetValueで保存、GetValueで読み込み。大変シンプル。
気に入ったのは、自作クラスをシリアライズして保存してくれる点。

現在はPC/Mac用に Environment.SpecialFolder.MyDocuments でドキュメント内にセーブフォルダを作っている。
iOS/Androidはやってないのでわからないが、Application.persistentDataPathあたりで保存と読み込みをすれば大丈夫だと思う(投げやり)。
STEAMWORKSに対応させるときにどうなるかは追記予定。

仕組みとしては、内部でXMLにしてから暗号化してるようだ。
そのため、Dictionary及びHashSetを含むクラスは保存できないので注意。
(自分は途中で気が付いてListで管理するよう書き換えた)

ちなみに暗号キーを間違えると「Bad PKCS7 padding~~」というエラーが出るので、こいつを目撃した人は読み込もうとしているセーブデータのキーが間違ってないか確認だ。

2015年6月20日土曜日

Blenderでポリゴンの裏を描画しないようにする手順 (メタセコからの転入者向け)

メタセコで形を作って、テクスチャアトラスやモーションをBlenderで作る、という方式をやろうとしている私です。

Blenderはmqoインポーターが付いているのはいいんですが、デフォルトだと片面ポリゴンも両面描画する仕様になってまして、建物内の部屋データとか作るときにしんどいんですね。

で、片面描画だけにする手順を見つけたのでメモします。



※注意
筆者はBlenderおよびDCCツール初心者なので、これが正解とは限りません。マサカリ歓迎。 

[追記]

ファッキンファック!


苦労してマテリアルをイジる手法で片面表示を指定ましたが、オプション一つでシーン全体の片面表示が可能であることが判明しました。

3Dビューで「N」キーを押してプロパティー一覧を出し、「シェーディング」の「裏面の非表示」を選択。


おわり。

俺より後に似たようなことに挑戦した方が、時間をドブに捨てずにすみます。本当にありがとうございました。

以下はその無駄な手順です。

まず、エディター「アウトライナー」から片面描画にしたいオブジェクトを選択。



エディター「ノードエディター」を開いて





「ノードを使用」にチェックを入れる。
※筆者はこれが分からなくて2時間ドブしました。ノードエディターなのにノードを使うがデフォでオンになってないって何やねん自己否定か。



デフォルトのノード構成はこんな感じ

「マテリアル」の丸いマークをクリックして、編集対象のマテリアルを選択(ややこしい、正確な呼び方不明)






ノードエディターの「追加」「入力」「ジオメトリ」の順に選択してジオメトリノードを追加。
同様に「追加」「コンバーター」「カラーランプ」でカラーランプノードも追加。





画面には合計4つのノードになる。
ジオメトリノードの一番下「前後」をカラーランプノードの「係数」に接続。
カラーランプノードの「カラー」を出力ノードの「アルファ」に接続。

はいこれで指定マテリアルの裏面が描画されなくなりました!!






うーんこういうのオプションでポチッと切り替わらんもんなのかのう....



参考:
ポリゴンの裏側を表示しない方法について
Blenderで裏面ポリを描画しない方法
ノードエディタのマテリアルノード

2015年6月14日日曜日

[Unity]NavMeshAgent.Stopのワンポイント ピタッと止める in Unity 5

Unity 5から、NavMeshAgent.Stop()のstopUpdatesオプションが削除されたので、どうにかしようとした。

[Unity]NavMeshAgent.Stopのワンポイント ピタッと止める
http://ttwco.blogspot.jp/2015/04/unitynavmeshagentstop.html 

デフォルトのStop()はアクセラレーションが効いて即座に止まらず少し滑ってから止まるので、
ゲームポーズとかの実装に支障がある。
そこでUnity 4まで NavMeshAgent.Stop(true) としていたのが、Unity 5で使えなくなったので代替手段を探したというお話。

結論、Stop()を呼ぶ前にvelocityの値を0にすることで解決。
 navMeshAgent = GetComponent<NavMeshAgent>();

        navMeshAgent.velocity = Vector3.zero;
        navMeshAgent.Stop();

こうね。

ここに辿り着くまでの軌跡はUnity Communityにも投稿しました。
http://forum.unity3d.com/threads/solved-how-can-i-stop-navmesh-agent-sliding-in-unity5.332233/

"NavMeshAgent.updatePosition = false".で行けるかなと思ったんですが、このオプションはNavMeshAgentを止めるわけではなく、親コンポーネントをAgentに追従させるのを辞めるという謎挙動。
シーンビュー見てるとキャラクターからNavMeshAgentだけ剥がれて動く様子が見れます。なんのために使うオプションなんだろう...

2015年4月11日土曜日

新作"Back in 1995" 発表しました

公式サイト立てて告知していたので、こっちの存在を忘れていた...

新作「Back in 1995」発表しました。




本タイトルは、初代PS風の絵作り・サウンドにこだわった"3D"アドベンチャーゲームです。

最近はインディーゲームから大企業のスマホアプリまで、さまざまな形でレトロゲーム回帰をテーマにした作品が世に出ております。
しかしながら、その多くがファミコン~スーパーファミコンの「ドット絵レトロゲーム」です。
弊スタジオではその後の時代、PlayStationやSega Saturnの質感を目指して開発しております。





今回の映像は初期開発版となりますので、今後、グラフィックもより一層「デチューン」を行い、
現在20歳後半~30代中盤の元ゲームキッズの皆さんへ、ピンポイントに響くゲーム体験をお届けいたします。

■タイトル情報
タイトル:「Back in 1995(仮)」
ジャンル:"3D"アドベンチャーゲーム
発売時期:2015年冬
プラットフォーム:未定
プレイ人数:1人
開発:Throw the warped code out
公式サイト:http://backin1995.com/

■イベント出展情報
「Tokyo Indie Fes 2015」 http://tokyoindiefest.com/ プレイアブル出展を予定しております。


■メディア掲載情報

Automaton
http://jp.automaton.am/articles/IotW/iotw-087-back-in-1955/

ファミ通.com
http://www.famitsu.com/news/201504/10076378.html

Game Spark
http://www.gamespark.jp/article/2015/04/10/56191/comment.html

窓の杜
http://www.forest.impress.co.jp/docs/serial/indiedigest/20150410_697261.html

思ったより反響が多く、驚いています。
まずは5月プレイアブルのクオリティアップ...もといクオリティダウンを頑張ります。

2015年4月3日金曜日

[Unity]NavMeshAgent.Stopのワンポイント ピタッと止める

NavMeshAgent.Stop();と普通に呼ぶと、ヌルッと慣性が働いて止まる。

ゲームのポーズなど、ピタッ、バシッと直ちに止まらせたい場合は

NavMeshAgent.Stop(stopUpdates:true);

とする。

(名前付き引数で見やすくしているので NavMeshAgent.Stop(true); でも良い)

ところがこれ、古い方のスクリプトリファレンスだと載ってるんだけど
http://docs.unity3d.com/412/Documentation/ScriptReference/NavMeshAgent.Stop.html

Unity 5以降?からのやつからは消えてる。隠しパラメータってやつ??

http://docs.unity3d.com/ScriptReference/NavMeshAgent.Stop.html

謎い。

[追記]
Unity 5 からはこのオプションが消されたので、別の手段を取る必要があります。
http://ttwco.blogspot.jp/2015/06/unitynavmeshagentstop-in-unity-5.html

2015年3月22日日曜日

3/21「UnityのためのC#勉強会」に参加してきました。

いいかげん年功序列的にUnity中級者に押し上げられてしまった身としては、C#の文法でスクリプトを書けることについて改めて見つめなおす必要があるだろう、とは常に思っていまして。そんなところに今回の勉強会でして、これは他の用事をおしても行かねば!と気合い入れて参加してきました。

日本Androidの会Unity部の皆様ありがとうございます!

資料、口頭、ライブコーディングから見て気がついたところなど色々と。
(個人的な気付きが中心なので、そこ違う!というツッコミは随時お願いします。)

「Unityでもう少しc#を書きたい人のためのLINQ入門」

@moririring さん (関西から参戦!) 資料

■LINQの利用について
・ふつうのfor文は「手続き的な書き方」。Linqは「宣言的な書き方」。
・あたりまえだが、複雑なワンライナーがいいわけではない。
・LINQの書き方はQuery Syntax と Method Syntaxの二種類。
・有名な話、UnityではiOSでAOT関連でのトラップがあるので注意。

・LINQはループを隠蔽している。ループ数を少しでも減らそう。メソッドの順番が重要。宣言した順(左から右へ)処理が進むので、Whereとか数を絞るフィルタリング系を先に書く。

・遅延実行を意識する。LINQはデータを加工する段で実体化される。実際に値を入れる瞬間など。LINQ書いた箇所では処理されない。ブレークポイント貼るとわかる。LINQで宣言された値が利用されるところではじめて実体化される。

・むだな処理に気をつける。たとえば、CountとAnyは内部のループ回数がぜんぜん違う。

■Visual Studio関連
・Unity 5 Import Packageからメニューから無くなってる。Unity VSがインストールしているフォルダの中にパッケージあり。
(これはPCに複数バージョンのUnityを入れている場合も同様っぽい)

・Macの場合は同等のインテリセンス機能が使えるOmniSharpがいいよ。

・リファクター機能
選択部分を切り出して関数化する。メソッドの抽出。

・Unity VSの機能
右クリックからオーバーライド関数の宣言を生成できる機能。
ブレークポイントを貼った実行で、Unity側からプレイスタートしたい場合は
VSでAttach to Unityを押してからUnity EditorでPlayを押す。

・(VSの話ではないが)積極的にvarを使おう
型推論してくれる。右辺値が参照型でnewとかしている長い関数の場合はおすすめ。

■感想:
自分の周囲にはLinq推しに恵まれているので、プロジェクトに少しずつ導入して入るものの
(具体的にはUIのシステムで、NGUIの複数のパネルに対して操作するところとか。)
=>ってなんやねん!とか思ってたタチでした。所謂おまじないでコードカイているというか。実際はこれ、アロー演算子。

講演はライブコーディングしながらのくだりが最高で、まずはふつうのfor文で作った処理をまず作る。そこからスタートして、条件判定の部分をメソッド化して、デリゲートで呼び出す、呼び出し側を削って削ってラムダ式に書き直して。。。と、だんだんLinqの形に近づけていく方式。これはすごくわかりやすかった。どういう意図であの記述になっているのか?が順を追って理解できるというか。録画して繰り返し見たいくらいです。

あいえみゅねれーらぶる。

「UniRxとかReactivePropertyとか」

@Grabacr07さん。 資料

・Linq to Events。Linq to Events。すなわちRx。
さきほどまでの(moririringさんの)話はコレクションを扱うLinq to Objectだったが、これは時間軸の概念。

・「UniRx」はUnityにReactive Extensionsの考え方を導入する。
大事なことですが、オレオレライブラリではない!ちゃんとした考えに基づいて作った「移植」。
同じ使い方がほかの言語で使えるので、学習コストは無駄にならない。

・変化をストリームで拾ってくる処理を書く場合、初期値の供給があるかどうかは、UIに使うものとしては非常に大事。UniRxにはそのへん気遣って作られている。

・UIの入力判定系は、普通のやり方はOnClickにAddListner生やしたりするがUniRXを使えばStart()の中で宣言するだけ。Updateでぐるぐる回さなくてよい。

Reactive XというウェブサイトがReactive Extensionsリファレンス的に使える。英語だけど図付きでわかりやすい。

・日本語資料は@toRisouP氏の「未来のプログラミング技術をUnityで」おすすめ。
(公演当日の前日に出たばかり。 最前列講演者ど真ん前に座っていた@toRisouPも苦笑い。)

■感想:
資料の中でC#はいろいろなところで活躍してます!と、「C# Everywhere」と銘打ったスライドにPSM Studioが出て泣いた。
UniRxはUIまわりの待ち処理にかなり有効そうなので順繰りに触っていく予定。

「OrangeCube 自社フレームワーク」

岩永信之さん 資料

■自社フレームワーク
・Unityの課題を解決するために自社フレームワークを用意した。

・自社で作っているゲームは、アクション性は少なくUIのページ数が多いタイプ。
 通信周りの非同期処理を楽にしたい。

・非同期処理担当"IteratorTasks"
.Net 4のTasksの移植のようなもの。(Unityは.Net3.5相当なので使えない)
C# 5.0で解決している問題だが、Unityでは使えないので「もどき」をつくった。
標準ライブラリの互換ライブラリ作って、は超バッドノウハウっす...。Unityがry(以下5回ほど繰り返し

・ストリームからのバイト読み込みとかはゲームが止まる原因になりがち。
しっかり非同期で読むような設計をする。

・MVPに当てはめるとView側に当たるOnClickとかの方に処理のコードが増えるのはよくない。
ゲームロジック側、Model層が主役であるべき。そこで、ゲームロジックからビュー側に命令して、ユーザの選択結果を待つような設計にした。

(このへんから話に追いつけなくなる。ごめんなさい。)

■Visual Studio関連
・VSのクラス生成「Usage First」という考え方で、先に使う側で存在しないクラスを呼び出す処理を書いて、あとからメソッドを建てる。

・usingしてないクラスの呼び出しも、覚えていたら先に書いておいてVSの機能でusingを後から足す。

・get setの自動実装

・すべてのメソッドの上にgitとの連携を表示する"1 reference| 0 authors | 0 changes"と灰色で出てた。
(これはUltimateエディション専用機能だとTwitter経由で別の方に教えてもらいました)

感想:
ぶっちゃけ紹介の内容は流石「C#でぐぐるとトップで出てくる」だけありまして超応用的。
C#からC#コードを生成しまくる話とか、、、
自分のレベルではまだ縁遠い話でしたが、行き着くところまで探求するとこういうことができる、という一つの指標としてガッツリ見るだけ見てました。

貴重だったのはものすごい速度のVSの機能使いまくりコーディングがライブで見れたこと。
本職が開発ではないので、なかなかそうした現場を見る機会がなく。貴重でした。

●勉強会全体を通して●


LINQの勉強会ということでしたが、登壇者4名が全員Visual Studio推しだったことと、ライブコーディングが数回あったのでVisual Studioの働きっぷり堪能の巻!、という感想です。

ふつうのUnity勉強会はノウハウ情報共有が主ですが、自分が最近知りたいと思っている「ふだんどういうスタイルでコーディングしていて、どういう細かい機能やツールを使っているのか?どういう考え方で設計しているのか? 」の一面が見れる回だったなと。

この系統のシリーズでまたやってもらいたいなぁ、と思いつつ、次はもう少し理解が追いつくように切磋琢磨。

余談ですが、UniRXライブコーディングの時にストリームをチェックして戻り値をboolで返す処理を三項演算子でササッと書くくだりがあったのですが、そこがすんなり理解できたあたり自分の成長を感じました。(こなみ)

2015年3月18日水曜日

PS Vita「CardBoard Cat EP」最終アップデート1.21

PS Vita 「Cardboard Cat EP」 最終アップデートです。



主な更新点は

・海外版「The Cardboard Cat」のステージ構成を追加(International Mode)
・全体的に明るくシャープに
・アイコンとスプラッシュイメージを変更
・若干データ圧縮

です。












私から伝えたいこと。

どうか買ってください。

 



このゲームはPlayStation Mobileでリリースすることを最大限活かすべく、「背面タッチパネル」のハードウェアをフル活用したゲームシステムを採用しています。

PSMの終了が発表された今、移植する先はありません。

不本意ながら、今しか遊べないゲームになってしまった「CardBoard Cat EP」。
PlayStation Storeにて154円で2015年7月15日(水)まで、販売中です。






(↑PS Vitaブラウザから踏む用リンク、PCからは見えません)

VitaでPS Storeを起動して、右上の「PlayStation®Mobile」ボタン→ジャンル「アクション」でたどりつけます。

PCからも見えるストア情報はこちら(直接購入はできません...)

よろしくお願いいたします。

2015年3月11日水曜日

PlayStation Mobile 終焉

PSMのおっかけをやって1余年が経過した。


当時社会人3年生だったオレはUnity for PSMに出会い、 即効でファンになった。元々ゲーム開発とは縁のない生活だったが、 それからはPSMの為だけに生きてきたようなモンだ。



毎日Unity Editorで開発したし、徹夜も二度や三度じゃない。



ファンやって半年目、PSNで俺のゲームを出せた時には 嬉しくて本気で涙が出た。人生で最高の喜びだと有頂天になって、Twitterで一人で吼えてた。



そして今年の3月。

信じられないものを目にした。「PlayStation Mobile終了!!」


目を疑った。絶対ありえない、絶対ありえない。死んでもありえない。一週間仕事を休んだ。 (※休んでません)



もうDevPortalも開いてない。毎日の楽しみだった販売レポートのチェックも辞めた。


最近になってようやく、ゲームの別のリリース方法を考えよう…そう思えるようになってきた。


だけど俺には何も残ってなかった。開発初心者という多感な時期にPSM一本でやってきたんだ。当たり前だ。


マトモにXcodeを触ったのはいつだっただろう。PC用にパッドのキーアサインをしたのはいつだっただろう。


販路について、プラットフォームについて、そして将来について最後に考えたのはいつだったんだろう。


残ったのは初歩的で汚いコードしか書けなしい30代間近の中身スッカラカンな男。それだけ。



こんなのが今更どうやってスマホとかに進出するってんだ。それに今まで気づかなかった俺は最高にバカだ。


そしてこんなグチをブログでしかこぼせない俺は最高に惨めだ。



是非俺を笑ってくれ。蔑んでくれ。そしてこの日本のインディーゲーム開発環境を考えるキッカケにしてくれ…



--------------



皆さんもニュースでご覧になったように、PlayStation Mobileのサービスが7月で終了します。

PlayStation Mobileのコンテンツ配信が7月15日をもって終了
http://www.famitsu.com/news/201503/11073698.html

前半はふざけたコピペ改変をぶつけていましたが、PSMという奇跡的で素晴らしいスキームがあったからこそ、ちんけな自分が奮起してゲーム一本ひねり出すことができたわけです。

「なんかVitaで頑張ってる個人開発者がいるらしい」と多少話題のタネになり、PSMを通じて沢山のゲーム開発者と出会えたこと。これらは代え難い経験になりました。

個人が市販のゲーム機でタイトルを作って販売できる。こんな、ひと昔前から考えたらクレイジーな仕組みを用意してくれたSCEの皆様には、ただただ、感謝の言葉しかありません。

私はUnity派なのでまだしも、PSM Studioの専用開発環境でやっていた方々が一番ダメージを受けているもの思います。

XNAの更新が止まってしまった時と同じように、そのままではPCその他のプラットフォームに移行できませんから、大変かと。、
(※第一版では「XNAがなくなった」という表現をしてしまい、鷲アイコンやスマイリーアイコンからまさかりを投げつけられたので修正しました。謹んでお詫び申し上げます。)


自分の場合は、実は5月の「東京インディーフェス」に出展が確定しまして、プラットフォーム「Vita」で提出していましたのでちょっと悩み中です。


現在開発中の新作はUnity for PSMで4.3.4f1に苦しめられながら作り続けるつもりです。7/15までは起動確認できるみたいなので。


わたしはPSMを続けるよ!


この潮流をただの「夢」で終わらせず、いつか「PSMがあったから、いまの日本のインディーゲームシーンがあるんだよね」と振り返られるよう。
これからも頑張って行きたいと思います。

最後に一言、劇場映画「ルパン三世Dead or Alive」より大好きな一言を。


「…いい夢だった!」

2015年3月7日土曜日

メタセコユーザーがMaya LT移行に挑戦

現在開催中のGDC2015にて「Maya LT 2016」が発表されました。



自動机ニキはゲームエンジン勢が火花を散らす無料化の波には目もくれず、相変わらずお前もGAMEWAREにしてやろうかの勢いで会社買収。直近はゲームエンジンを有するBitsquid社をお買い上げです。歴史シミュレーションで有名なParadox Interactiveが使っていたエンジンだそうで。
そういえばHavok社のアナーキー大作戦はどうなったのかしら。

さて、Metasequoiaにしてももっそい適当に使っていた自分ですが、コレを機会にMaya LTに移行をねらって事始めしております。

これまでメタセコでテクスチャも作らず、四角と円柱をエイヤーでくっつけてゲーム用データを作っていましたが、やはりアニメーション付きのモデルをしっかりつくろうと思うとMaya一択かなと。Bleうわなにを




GGJ2015で錬成したさわやかなヒヨコちゃんを御覧ください。












ぼちぼちMetasequoia→Maya LTに関するあれこれをメモしてきます。
まずは導入最中で気になったことなど。

・Maya LTの書籍

1冊出ています。


「Maya」に関する書籍はそれこそワンサとありますけど、内容がプロすぎる。そして「Maya LT」に限ったものはこの本のみで、おっさんや建物を作りたい自分的にはフィットするものはまだない。

そこで、とりあえず公式のチュートリアル 「Maya スタートアップガイド」を順番にやっていってます。

・動作重い?

筆者はVaio Pro 11 メモリ8Gモデルで動かしていますが、いまのところ快適です。
実は少し前に代理店のダイキン社にてMaya LTセミナーを受けてきて色々聞いてきたんですが、モバイル用のモデルデータ作成ならSurface Pro 3でも大丈夫らしい。

Maya LTには15日間使える体験版があるので、とりあえずダウンロードしてグリグリしてみると良いです。

・保存形式について

メタセコは.mqoでモデルデータを保存していますが、Maya LTの場合はもう一段上のレイヤーの「シーン」という単位で保存します。モデルデータだけではなく、ライティング、カメラ、関連のマテリアルがガバッと保存されます。Unityのシーン(またはプレハブ)に近い感じ?

・ねだん

税込み1年間サブスク35,640円。

一日あたりの利用額はたったの98円、お昼のお弁当と一緒に買うTポイントカード会員10円引きキャンペーンの雪印コーヒーと同じくらいでしょうか。

Autodeskストア Maya LT 2015

"プロのインディーズゲームメーカー" #とは

Metasequoia 4 EX(FBX出力ができるエディション)は19,980円なので、実は倍価もしない。


・操作周りにおけるメタセコとの違い


Q: まずうちさぁ「基本図形」したいんだけどなんか2種類ない?
A:「ポリゴン」を使ってください。「NURBS」は映像制作用の、滑らかな形状を出す特殊モードみたいな。そのままだとfbx出力できません。

Q:右クリックしながらマウス操作で視点ぐりぐりはMaya LTではどうやんの
A:さらにAltキー+左クリックしながらマウス操作。その状態でスクロールすればズーム(ドリー)じゃ。
Altキー+真ん中ボタン(スクロール押下)でカメラの上下左右移動もできるぞい。

Q:オブジェクトに名前つけたりとかどうすんの
A:右側の「チャネルボックス」がこれにあたる。

Q:オブジェクトパネルみたいのどうやって出すの
A:メニューの「ウィンドウ」→「ハイパーグラフ:階層」で見れる

Q:「Unityに送る」でfbxもってくとめっちゃ小さく表示される
A:Unity側でモデルを選択して、ImportSettingsのScaleFactorを「0.01」から「1」に1しよう。
Mayaの1グリッド=Unityの1グリッドと同一になるぞ。



(以後増やしていきます)

・べんりなショートカット

 4キーでワイヤーフレーム、5キーでシェーディング表示

2015年3月4日水曜日

PS Vita "The Cardboard Cat" is out now.



PlayStation Mobile Title "The Cardboard Cat"(English version) is available on over 30 countries.

See the trailer video.


P

Download link for you PlayStation Vita.






or find in PlayStation Mobile Store in PSN, category "Action".



2015年2月8日日曜日

LoadLevelAdditiveAsyncで追加ロードしたSceneのNavMeshは消えるっぽい。

らしい。(Unity 4.3.4f1固有の問題かも)

配信中の「CardBoard Cat EP」は、ステージデータを単一のSceneにしておいて、LoadLevelAdditiveAsyncで読み替えをする仕組みを撮っていました。

で、NavMeshを載せたSceneを追加読込した時にメッシュが消える問題が発生。
結局、ステージ以外のコンポーネント全てにDon't Destroyをつけて、LoadLevelAsyncでステージのシーンを読むようにしたら治りました。

新しいバージョンでは何らか別の方法ができているかもしれませんが、PSM勢はお気をつけください。

参考:Problem with NavMesh and Asynchronous load

2015年1月22日木曜日

PS Vita 「Cardboard Cat EP」 Ver 1.10配信

PS Vita 「Cardboard Cat EP」  2回目のアップデートです。



主な更新点は

・新ステージ(のおためし版)追加
・経過時間カウンターの追加、ベストクリアタイムを記録
・チュートリアルテキストに背景を追加して見やすく
・UIまわりの表示が重かった問題修正

です。
現在、海外版に向けて新ギミックを作っていますが、それを「Extra Stage」として先行して収録しました。10分程度で終わるステージです。







(↑PS Vitaブラウザから踏む用リンク、PCからは見えません)

VitaでPS Storeを起動して、右上の「PlayStation®Mobile」ボタン→ジャンル「アクション」でたどりつけます。

PCからも見えるストア情報はこちら(直接購入はできません...)




その他、実は前バージョンに不具合があったので修正を行いました。

 Ver1.10 アップデート内容
 ・海外版に収録予定の新ギミックを“Extra Stage”として追加しました。
 ・死亡カウンターが正しく更新されていなかった不具合を修正しました。
 ・リトライ時にトゲ罠が元の位置に戻るようにしました。
 ・メニュー表示時にプチフリが発生していた現象を修正しました。
 ・チュートリアルメッセージに背景画像を追加しました。
 ・経過時間カウンターを新設しました。スコアアタックにどうぞ。

2015年1月11日日曜日

NGUIが重くてFont.CacheFontForTextが処理を食っているときはダイナミックフォント使用をやめよう

間違ってダイナミックフォントを使っている可能性があります。

NGUIを使ってメニューを開く瞬間にカクっとFPSが落ちるので、プロファイラで調べたところ。


"Font.CacheFontForText"ってのがすごい処理食ってる。
原因はUILabelでの文字表示にダイナミックフォントを使ってしまっていたから。

FontMakerで作ったフォントマップをきちんと指定してあげましょう。

"Unity"ってほうはUnity標準のダイナミックフォントを使うモード。
"NGUI"を選択しなおして、"Font"で作ったフォントマップを指定。

せっかくNGUIを使っているので、 漢字を多用する日本語テキストを表示するとき以外は避けよう。

Unity Freeユーザーの人も、GUI表示でカクつくぞ、と思ったら片っ端からNGUI Fontに指定し直すと効果あるかも。

参考: Topic: Lag on Ipad due to font.cachefontfortex

2015年1月3日土曜日

VS2013で列挙型からSwitchステートメントを作るときはコードスニペット機能を使おう。

Visual Studio Community 2013が公開されて以降、Unityでの開発はVSに移行しました。
もちろんいろいろな便利機能を使いたいからですが、その一つ「強力なコードスニペット」。

Unity C#でよくやる制御方法で、UpdateやStartの中でswitch分岐さす書き方がありますが
たとえばこんな列挙型があったとします。

    enum MyEnum
    {
        Ringo,
        Banana,
        Abokado
    }
こっからそれぞれのSwitch文をちまちま書かずとも「自動生成」させることができます。





おもむろに"switch..."と書き出して、”switchステートメントに対するコードスニペット"が表示されたらすかさずTabを二回押す。

        switch (switch_on)
        {
            default:
        }

まず第一段階。
この状態では"switch_on"にフォーカスがあたっているのですが、ここからさらに、先ほど作った"MyEnum"を()の中に記入してカーソル下ドーン!

        switch (MyEnum)
        {
            case MyEnum.Ringo:
                break;
            case MyEnum.Banana:
                break;
            case MyEnum.Abokado:
                break;
            default:
                break;
        }

楽すぎる!!!!

()の中はインスタンスに置き換えてくだされ。

備忘録程度。

2015年1月2日金曜日

iTweenがArgumentOutOfRangeExceptionで死ぬ問題の回避


 iTween.PauseとかResumeとかStopとかがNullで死ぬ時がある。

とりあえずtweensをforeachで回している中の処理をif (type.Length <= targetType.Length){ [処理] }でかこってやると回避できる模様

        foreach (iTween item in tweens){
            string targetType = item.type+item.method;

            if (type.Length <= targetType.Length)//This is additional//
            {
                targetType = targetType.Substring(0, type.Length);
                if (targetType.ToLower() == type.ToLower())
                {
                    item.enabled = true;
                }
            }//This is additional//
        }

tweensに入っているiTweenの参照が何らかの理由で消えてたりするとnullになる。
付け焼き刃っぽいけど、多分大丈夫だと思う。

参考:Possible bug in iTween.Count(GameObject target, string type)

2015年1月1日木曜日

Inspectorへ複数のprefabやobjectを放り込みたいときはロックボタンを使おう。

たとえばpublicなListを作って、Inspectorへ沢山のオブジェクトやらプレハブを登録したいとき。
複数選択しようにも、クリックするとInspectorが切り替わってしまってもっていけませんね。
そんなときは右上の小さいアイコン「このInspectorをロックする」(勝手に命名)の南京錠をクリックしましょう。


Inspectorの表示がロックされました。どこ選択しても切り替わりません。さあ今のうちにオブジェクトを複数選択してぶち込むんだ!

すごい目立たないけど重要なボタンです。

2014年12月31日水曜日

GetComponentsInChildren経由で子のGameObjectをListで取得

GetComponentsInChildrenはTransformの配列で返してくるので、LinqでGameObjectの参照を拾いつつListにする。
何回も使う人は拡張メソッドにするといいかも?

List<GameObject> objects = GetComponentsInChildren<Transform>()
                            .Select(trs => trs.gameObject)
                            .ToList();

Linq習い中なのでSelectがよくわからず、最初はTransform[]で取った後ForEachでListにいちいちAddするとかいうスーパーバカな方法で無理やりやっていました。
これですっきり。

MonoBehaviourを継承しているクラスなら、こんなことせんでも

List<MyClass> myClassList = GetComponentsInChildren<MyClass>().ToList();

でOK。

2014年12月10日水曜日

PS Vita 「Cardboard Cat EP」 Ver 1.04配信

PS Vita 「Cardboard Cat EP」
先ほど最新バージョンのVer 1.04が配信されました。
多数の修正点を盛り込んでおります。詳細はこちら。



タッチ精度が良くなった!リトライが早くなった!誤タッチ誘発UIが無くなった!

あたりが重要ポイントです。
すでにお買い上げの方も、更新をお願いいたします。



(↑PS Vitaブラウザから踏む用リンク、PCからは見えません)

VitaでPS Storeを起動して、右上の「PlayStation®Mobile」ボタン→ジャンル「アクション」でたどりつけます。

PCからも見えるストア情報はこちら(直接購入はできません...)

ちなみ、新しいPVを作りました。




今回の修正パッチは遊んでいただいた色々な方の意見を盛り込んで作っています。

もし、お気づきの点があればコメントくださいませ~。