C#は電気羊の夢を見るか?(引っ越し中)

dtiブログが閉鎖とのことでhttp://tanocs.blog.fc2.com/へ引っ越します。

ながーいContentのコンパイルを避ける方法

いよいよゲームも完成が見え始めてくるとコンテンツのコンパイル時間がやたらと長くなってくる。

ちなみに、2行の修正でコンパイルに40分待ちとか、正直やっていられない。
しかもContentのコンパイルが走る条件がいまいち不明で、ランダムにやってるんじゃないかってくらい気まぐれだったりする。

そんな天に祈る気持ちでコンパイルボタンを押さずに済む方法があった。
簡単にいえばゲームライブラリを別に用意して、そいつにコンテンツをごっそり移動してやるだけ。

詳しくは、このサイトが解説している。

タイトルが
『第5回 ゲーム開発者にとってのビルド作業とは? ― Content Pipelineを使ってみる』
とかなってて分かりにくいが、このテクニックが紹介されてるのはここだけだったりする。

これで、引き当てると見事一回40分のハズレクジ付きのくじ引きをせずに済むようになる
このエントリーをはてなブックマークに追加
LINEで送る

XNAと言う壁の厚さはどれほどか

WindowsでXNAのゲームを公開すると、
ネイティブのDirectどの程度目減りしてしまうかと言うお話。

とあるブログでようやく体験版の配布を行ない始めたのだが、
各アクセス解析から.NET、XNAという壁の厚みを大まかに伺い知ることが出来たと思う。


普段そこのブログの平均被アクセスは30人/日
公開当日のユニークアクセスが180人
単純に差を求めれば150人は「ダウンロードの意志があった」としてもいいだろう。

そこから実際のダウンロードに至ったのは80人
つまり、ページ内に記載してある.Net + XNAの環境を整えてくれた
または、すでにその環境が整っていた人は
ダウンロードの意志があった人の45%以下という事になる。

純粋な理由がXNAによるものか否かは定かではないが、
この数値だけを見ると機会損失率が50%を超えてる・・

一般ユーザーというのは、よく分からないものをわざわざインストールする手間を
嫌うのだなぁと痛感させられた。

その手間を超えさせるだけの魅力あるゲームに見えなかった
という評価の裏返しでもあることも考えられるが、
さんざんスクリーンショットを掲載し、ブログ上で開発状態を公開しており、
公開当日に平均値を大きく上回るアクセスがあったことを考えれば、
この考え方は大きく間違ってはいないと思う。


現在はクリックワンスインストーラを公開して、様子見。
このエントリーをはてなブックマークに追加
LINEで送る

たんじょうび

本日誕生日でございました。
29になったので肉を食いに行こうということになり
焼肉よりもっと肉を!ということでステーキをブロンコビリーに食べにGO

食べに行こうと言ったのは自分でありながら、どうもステーキってのはクチャクチャした食感で、おいしいという事が経験上あまり無かった。

まぁ、おごりだし、ファミレスだし、そのへんはまぁいいかと。
とにかく29に肉を食べたかった。

道中、ずらりと並んだCR-Zに気を取られ、行き過ぎたり戻りすぎたりしつつなんとか目的地に到着。
メニューを見ると、一品2000〜な感じで、あれ、こんなに高かったかなぁと思いつつ、希少だと言われるミスジのステーキを注文。

これがなんと予想外においしい!

もう少し油っぽさがあっても良いと思ったものの、とにかく柔らかい。
口の中でいつまでもクチャクチャと残る感じ無く、とにかくパクパクいける。
あまりに夢中に食べ過ぎて写真撮り忘れてたよ・・


ちなみに店についたのが11:30くらいで、駐車場は自分一台しか止まってないほどにガラガラ、店内もシーンとしていた・・・
のだが、帰りには満車!1時間待ち!となかなかお盆なのだなぁと思わされた。

いやぁ、29にたべた最初に肉は誠においしゅうございました。
この調子でいい歳になるといいなぁ。心からご馳走様でしたと言いたい。
このエントリーをはてなブックマークに追加
LINEで送る

しょうもないメモ

いっつもいっつもいっつも忘れて後で調べるのでメモ

2点間の距離を調べるのは
Vector2.DistanceやらVector3.Distanceやらを使えば良い。
このエントリーをはてなブックマークに追加
LINEで送る

XNAでメモリーリークが発生!?

今日何気なくプログラムを起動したまま、うたた寝をしてしまったら
なんとOutOfMemoryExceptionが出てるではありませんか・・・

C#ってGCがあるから大丈夫とかXNAはメモリーリークに強いとか、そういう話はどこに行った・・・そういった幻想にやられ、すっかり意識していなかった。

とりあえず、後片付け周りを調査してみるかな・・・
このエントリーをはてなブックマークに追加
LINEで送る

コンストラクタのオーバーロード

シーンに分岐があるかどうかや、そのシーンでシーンの末端を担う等の場合、コンストラクタにフラグを追加したくなるのだが、毎回引数を渡すはめんどくさい。

そこで、コンストラクタをオーバーロードしようとするのだが、意外と手こずったのでメモ

//もともとのコンストラクタ
//シーンクラスを継承とかしてた場合 :base()とか必要に応じて書いてくりゃれ
public GameSceneTest(Game game, bool isLastScene) : base(game) {
//なんか処理とか
}

//省略形のコンストラクタ
public GameSceneTest(Game game) : this(game, false) {
//オーバーロードする場合、此処に書く処理はthis()コンストラクタの実行後に実行される
}
このエントリーをはてなブックマークに追加
LINEで送る

XNAからFormクラスプロパティを変更する方法

テクスチャによって複数のMultiSampleTypeを使い分けたい場合、
どういうわけか最小化して、その状態から復帰するとプログラムがこけるのでこいつをどうにかしたい。

XNAはそのままだとウィンドウの最小化、最大化ボタンが出っぱなしになるため、こいつを以前やったゲームクラスのWindowsForm化の応用で止めてやる事ができる。

今回はアクロバティックなソースではなく非常に簡単に実装できる


1.参照設定に System.Windows.Forms を追加
2.using System.Windows.Forms; を追加
3.コンストラクタに以下の三行を追加して終わり

Form MyForm = (Form)Form.FromHandle(this.Window.Handle);
MyForm.MaximizeBox = false;
MyForm.MinimizeBox = false;


他に、いくつかのWinFormパラメータも使えるようになるので、
XNAの制限に引っかからない限り応用の幅は結構広いと思う。
このエントリーをはてなブックマークに追加
LINEで送る

Content.Unloadの罠

大ハマリしたのでメモ

三つ前位のエントリでGameくらすそのものを切り替える仰々しい物を作っていたのだが、
Content.Unloadで事足りる事に気が付き、方針を変更した。
まぁ、前回の奴はゲームパックとかそんな感じのを作りたい時にでも使えば良いと思う。うん。

んで、早速各シーンのデストラクタにContent.Unloadを挿し込んで作業をし、グラボ二枚刺しの変態環境で動作チェックを終え、一般環境でテストをするとOutOfVideoMemoryExceptionが・・・・

あれこれ調べGC.Colloct()すればいいよ的な事が書かれているものの、これを試しても直らず・・・

これはもうダメかとデストラクタでTexture2DやRenderTargetに
片っ端からnullつっこもうかと覚悟を決めたものの、やっぱ面倒だなぁと

ふと、昔勘違いでクラス毎にContentManagerを大量に作ったことがあることを思い出し、同様の実装で各シーンごとにContentManagerを持たし、デストラクタでUnloadした後にDisposeするようにしたところ、直った。


ちなみにContentManagerのコンストラクタ引数の”サービスプロバイダ”とか言うわけ分からないのはgame.Servicesプロパティを突っ込めばOKぽい。

まとめると以下の感じ。

■シーンプロパティ
protected ContentManager Content;

■シーンコンストラクタ
this.Content = new ContentManager(game.Services);

■シーンデストラクタ
Content.Unload();
Content.Dispose();


あとは今まで通り、Content.Load<>とかしてやれば良い。
ちなみに Content.RootDirectory = "Content"; を忘れて焦らないように。


DirectX8時代にUnloadしてからDisposeを経験していたのと、ContentManagerを複数保持できることを知っていたおかげで運良く乗り切れた。

一見無駄に見える知識も役に立つことがあるもんだなぁ、と。
このエントリーをはてなブックマークに追加
LINEで送る

メモ

最近、自作のゲームが恐ろしく重たくなってきた。
一回のコンパイルで10分とかかかるので、
うっかりコンパイルしてしまうとそのまま10分持って行かれる・・

そんなわけで、人生で初めてコンパイルをキャンセルする必要が出てきた

そういうわけでCtrl+Breakでコンパイルをキャンセルできる。
Breakキーも人生で初めて使ったよ・・・
このエントリーをはてなブックマークに追加
LINEで送る

クルトガ

ああ、日本はまだ終わってなかった。
日本人の細かい技術ってのはこうやって無駄遣いされるべきなんだよ。

早速クルトガを買ってこようと思う。
このエントリーをはてなブックマークに追加
LINEで送る

 | HOME | 

PAGE TOP ▲

Appendix

■春条

■春条

生息地は愛知
車と甘い物が好きな31歳
特技は無限昼寝

MONOからSharpDXを使う
変態的な手法で、
.NET Frameworkを使わずに
ゲーム作りやってます。

Search

Calender

« | 2010-08 | »
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

Twitter

Recent Entries

DTIブログポータルへ
このブログを通報
Report Abuse

利用規約