サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
d.hatena.ne.jp/tueda_wolf
キャラクターのステータスとかアイテム情報とかデータベースで管理したいじゃん? 男は黙ってテキストファイル(カンマ区切り)、は男らしいけど21世紀のやり方としては素朴すぎる。 その辺のパラメーターは作った本人(プログラマー)以外が触ることが多いけど、よくあるパターンは --> だからそこに日本語は使うなって言っただろボケ --> ファイルは全部UTF-8で保存するって約束したじゃないですかー --> ここカラムが1つ多い、こっちは1つ少ない --> あれこのファイル古くない? とか普通にあり得る。そんなこんなで前からデータベースを組み込みたいと思っていた。 SQLiteは非サーバー/クライアント方式で組み込んで使うことを想定された軽量データベース。 ゲームで使うならこれ1択。 System.Data.SQLite これは.NetからSQLiteのデータベースにアクセスするための.NetのDL
久しぶりのC#ネタ。 C#にはMixinの機能はないがインターフェースと拡張メソッドを使って同じような事ができる。 C#ではインターフェースに実装を含める事はできないため(当たり前だ)、インターフェースでは実体(メソッド)を取り込む事はできない。 これを解決するためにインターフェースに対して拡張メソッドを使ってメソッドを追加してやる。 これがC#でMixin(のようなもの)を実現する方法だ。 例えばこんな感じ。 public interface IAnimatable { } public static class IAnimatableExtensions { public static void AddClip (this IAnimatable anim, AnimationClip clip) { } public static void RemoveClip (this IAni
OpenGL 3.3以降はテクスチャー周りがだいぶ整理されて使いやすくなった。 今までの苦労は何だったんだろうと思う。 一番大きな変化はテクスチャーがテクスチャーデータ(Texture Object)と、それをサンプリングするサンプラー(Sampler Object)の2つに分離したこと。 テクスチャーオブジェクトはglGenTextures()で作りバインドしてglTexImage2D()でデータを転送する。 glGenTextures (1, &texture); glBindTexture (GL_TEXTURE_2D, texture); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); それに対してサンプラーオブジェクトはglGenSampl
これは朗報。NVIDIAのQuadro系列でしか使えなかったESXiのDirectXエミュレーションのハードウェアアクセラレート(vGPU)が、IntelやAMDのGPUでも使えるようになる。 (GeForce系列は不明) やっぱりGPUは2枚必要なのかとか、インテルの内蔵とx16の2つを指したときにvGPUに回すGPUは選べるのかなど面白そうな話題がある。 あとやはりWeb Clientのみのサポートなので無償ユーザーが有効にするのはどうするのかとか。 いずれにせよこれは楽しみだ。 Expanded vGPU Support vSphere 5.1 was the first vSphere release to provide support for hardware-accelerated 3D graphics—virtual graphics processing u
PC用のプロジェクトをAndroidプラットフォームに切り替えるとたいがいコンパイルエラーが出る。 varをつける 明示的に型を指定して受けとる var enemy : Enemy = GetComponent("Enemy"); みたいな C#の方が先にコンパイルされるようにする(スクリプトのコンパイル順) 典型的にはStandard Assetsの下にぶち込む これで90%は解決する。しないプロジェクトはあきらめよう! 片っ端から動かしてみるとこの3つが良い。 AngryBots --> フルのTPSゲーム。重い! C# Game Samples --> 2Dのミニゲームx5。デモとして良い Detonator --> エフェクト+物理演算。シンプルでいい LocomotionSyatemのデモも悪くなかった。とりあえずはこの3つがあれば十分だろう。 OpenGL1.xでライトがおかし
ふと思いついたのだがzfsの重複排除は仮想マシンでこそ真価を発揮する(はず)。 例えばインストール直後の2つのWindows7の構成ファイルは9割以上同じ物だろう。 理想では何個インストールしても1つ分の容量で済むはず。 物は試しとやってみた。ホストはESXi 5.1でゲストはWindows7。FreeNASも同じ仮想マシンに同居している。 重複排除で作ったzfsボリュームをESXiからiSCSIでインポート。その上に2つのWindows7をインストールする。 コピーではなくまっさらの状態からCDを使って別々にインストール。Windows Updateで最新状態に。 zdb -Sで重複度をチェックしてみると、 Simulated DDT histogram: bucket allocated referenced ______ ______________________________
うちではESXiの上で動くFreeNASが公開しているiSCSIターゲットを再度ESXiが仮想HDD置き場として利用している。 この構成で困るのはFreeNASが起動するまでESXiはiSCSIターゲットに接続できずエラーとしてストレージを利用不可にしてしまう事。 FreeNASの起動後に手動で再スキャンしてやれば問題ないが毎回手動でやるのは勘弁して欲しい。 そこでFreeNASが起動したらsshでESXiにログインして再スキャンするスクリプトを自動で実行することにした。 SSHを有効化 デフォルトではESXiはSSH接続を受け入れないので常に有効に変更する。 やり方は省略。GUIから簡単に変更できる。 パスワード無しでログインできるようにする 全部自動でやるためにFreeNASからパスワード無しでログインできるようにする。 FreeNASでssh-keygenで公開鍵を作ってESXiに登
これまでGPUをパススルーして仮想マシンから使う方法はあったが(ATIのみ)、 それとはちょっと違う方法で3Dをアクセラレートする仕組みがNVIDIAからリリースされた。 ESXi with vSGA (ドライバー ダウンロード) ESXi with vDGA (リリース未定) この2つの違いはここに詳しいが、 vSGA (S=Shared) の方はVMWareのGPUのソフトウェア エミュレーションをこっそりNVIDIAのカードで実行して高速化してやろうという物。 仮想マシンからは普通の「VMware SVGAアダプター」が見える。DirectX9.0cとOpenGL2.1に対応する。複数の仮想マシンから同時に利用できる。 vDGA (D=Dedicated) の方はパススルーと同じでGPUを1つの仮想マシンに占有させる。GPUのフルの機能が使用できる。たぶん仮想マシンからはGPUがその
どうもSandCastleの日本語情報が少ない。あるけど古い。日本語翻訳ファイルを作っている人を何人か見つけたが 自分が使う範囲しか翻訳してなかったりどうも使いにくい。 というわけで最新のSHFB 1.9.6をベースに全部のスタイル(hana,Prototype,vs2005,vs2010)の翻訳ファイルを作って公開した。 いい仕事したぜ。 .Netでドキュメント作るのにSandCastleいるだろ、英語と日本語のチャンポンで出力したら読みにくいだろ、 誰か翻訳ファイルを作って公開しろよ、お前がやれよ、いいよやってやるよ、どうぞどうぞ、公開したぞ(ドヤッ (←今ここ) あとヘルプファイルにAPIリファレンスだけでなく任意のページ(例えばチュートリアルとか)を挿入するのは結構難しい。 できなくはないけど、MSのヘルプ形式で長い文章を読ませるのはどうがんばっても無理。労力にあった成果にはなら
ライトマップというのはその地点を照らしている光の量を記録したテクスチャー画像で事前にこれを作っておくと、 リアルタイムに影を計算しなくても極わずかな付加で影が付けられるという技法。 フリー版のUnityではリアルタイムの影生成ができないため、影を付けようとすると実は必須。 テラインで地形を作った後、「Window」-「Lightmapping」で開いた後「Bake」でライトマップを作成する。 うちでは1〜2分かかった。 作成されたライトマップは自動でAssetsフォルダーの下にシーン名フォルダを作ってその下に置かれる。 ディレクショナル光源以外は無視されるのでそのつもりで。 設定項目はいろいろある。この辺はおいおい調べればいい。AOを有効にすると時間はかかるが品質は高い。 シーンの右下にライトマップの有効/無効スイッチがある。 (右:ライトマップ有効) ちなみにライトを無効にしても地形は事
マシンはXeonE3 1230v2, メモリは16GBでどちらもHDDx3(Raid-Z)+SSD(L2ARC)。 仮想マシンの方はCPUとメモリを半分だけ割り当てている。HDDはSil3132経由のeSATA接続をRDMで。 測定はNFSで公開してギガビットイーサーでつながったマシンからCrystalDiskMark. 物理マシン上に作ったFreeNASサーバー。 (Read遅いけどよくわからん) 同じ物理マシン上の仮想マシン(ESXi5.1)上に作ったFreeNASサーバー。 読み込みはほぼ物理マシンと同じ速度だが書き込みが10分の1、なぜだ。 同じ仮想環境のWindows7マシンに1台だけRDMしてみると常識的な値なので問題はESXi+FreeNASの組み合わせにあることは明らか。 FreeNASからはSCSIのHDDとして見えていて、どうもこれの書き込み性能が出ていない。 デフォル
ImageMagickのバイナリパッケージはDLLをインストールするだけなので、 プログラムから開発用にスタティックライブラリをリンクして利用したいと思ってもできない。 (配布するときはImageMagickごと配布する) で、ソースからコンパイルすることになるが、これが結構手間がかかる。 ソースは http://www.imagemagick.org/script/install-source.php#windows から ImageMagick-windows.zip をダウンロードする(バージョン番号は??) 普通のソースとは別のWindows専用のもの。 解凍すると出てくる Install-windows.txt に沿ってコンパイルする。 コンフィグアプリのコンパイル ...とはまる。 大まかな手順はまず(1)コンフィグ用のアプリをコンパイル,実行してImageMagick用のプロ
ESXi 5.1のゲストOSとしてWindow Server 2012をインストールしてHyper-Vを入れてWindows7をインストールするテスト。 2時間ほどで意外とあっさり動いた。こんな感じ。 問題はHyper-Vを入れるところで実機のCPUが仮想化をサポートしいる事をちゃんと教えてやらないといけない事。 おおよその手順は下記のURLの通り(なのだが後述の仮想ディスクをバージョン9にしないとHyper-Vは使えません)。 http://wahlnetwork.com/2012/09/05/installing-hyper-v-server-2012-on-esxi-5/ まずsshでログインして/etc/vmware/configに1行加える。 vhv.allow = "TRUE" で、リブート(しなくてもいいかも)。 起動したら次に仮想PCを適当に作る。仮想PCのバージョンは8で
正直言ってつまらない。絵はこれまで見たことがなかったタイプだが・・・ 1巻の終わりで主人公が巨人に変身したときはあきれた。 この先面白くなるのだろうか。
以前Application.LoadLevel()を使ってメニュー画面などを作ってみたが、 コンフィグ画面のように「終わったら元のシーンに戻りたい」時はこの方法ではうまくいかない。 LoadLevel()した段階で元のシーンは跡形もなく破壊されている。 一応全GameObjectでDontDestroyOnLoad()を呼んでおけば残す事は可能だが現実的でない。 ではどうすればいいか? これが以外と難しい。 コンフィグ画面の実態はGUIを定義したスクリプト1つ。 実装側の要望としてはこれを独立したシーンとして単体で開発したい。 またレベルは複数有るのでこのスクリプトを全てのレベルにコピーして使うような事はしたいくない。 以上をまとめると手順としてはこうなる。 コンフィグ・スクリプトは独立したシーンで開発 レベルからコンフィグ画面を呼び出したくなったら Time.TimeScale = 0で
2013年3月に日本語対応を追記。 SandCastleの日本語対応 そのまま(en-US)でも日本語で出力できなくはないが、英語と日本語のチャンポンになって読みにくいので 日本語(ja-JP)で出力できるようにする翻訳パックを作った。 http://code.google.com/p/sandcastle-help-file-builder-japanese-help-file-pack/ からどうぞ。 すでに何人かオレオレ翻訳を公開している人がいるけど、バージョンが古かったり不完全だったりして 決定版と言えるものが無かったので自分で作った。 あと2ch SandCastleも参考に。 http://toro.2ch.net/test/read.cgi/tech/1361981574/ はじめに MSDN風APIリファレンスを作ってくれるSandCastleがすごく良い。 Doxygen
OpenGLにわりと新しく入った機能でテクスチャー・バッファー・オブジェクト(TBO)というものがある。 これが非常にわかりにくい機能で過不足なく明快に説明した文章を見たことがない。 まずTBOはテクスチャーバッファーという名前のオブジェクトではなく、 2Dテクスチャーやキューブテクスチャーなどのテクスチャーの1種である。 つまりTBOオブジェクトではなくTBOテクスチャーである。 通常の2Dテクスチャーが2次元の画像データから値を拾ってくるのに対して、 TBOは汎用のバッファーオブジェクトから値を拾ってくるテクスチャーである。 Texture・2Dの連想でTexture・BufferObjectと名前を付けたのだろうが、激しく誤解を受けそうなネーミングである。 素直にBufferObject・Textureにしておけばいいのに。。。。 GLSLの中では通常の2Dテクスチャーはsample
Unityでyieldで止められるのはコルーチンとして実行されているときのみ。 つまりUpdate()関数では使えない。 これが意外と大きな制限で処理(コード)の大部分を占めるはずのUpdate()で使えないと意味がない。 使い道はないなあという印象だったが、意外といける事に気がついた。 Updateを使わずコルーチンで回す 目から鱗だがStart()関数でyieldしながら無限ループを回し自前でUpdate()と同等の処理を行う。 http://answers.unity3d.com/questions/8908/is-function-update-short-for-function-start-whilet.html function Start () { while (true) { // do something. yield; } } え、Start()関数って処理を戻さなく
C#では例えばMaterialクラスにColorという名前のプロパティがあった場合"Color"という文字列を取得するのは難しい(というか原則無理)。 リフレクションの機能で文字列(プロパティ名)からPropertyInfoを取得して呼びだす機能があるけど、その逆でプロパティからプロパティ名を取得するは無理。 無理なんだけど何とかしてしまった天才がいた。 How can I get objects and property values from expression trees? http://blogs.msdn.com/b/csharpfaq/archive/2010/03/11/how-can-i-get-objects-and-property-values-from-expression-trees.aspx This is a follow-up to the Getting
この間見つけたSpracheを試してみた。 SpracheはBison/Flexなどと同じ自分だけのDSLを作るためのパーサーを作るライブラリ。 この手のパーサーを1から書くのは非常に手間暇かかる作業で通常はやるべきではない。 (ただし本職のコンパイラ書きを除く) SpracheはC#のみで書かれC#自体の強力さと相まって非常にシンプルにDSLをパースするクラスを作成できる。 ここでは試しにkey = value形式で書かれたファイルをパースする。 あまりにつまらない例だがゲームのコンフィグファイルとかこれで十分なことが多い。 ↓パースしたい文字列。 speed = 300 health = 100 weapon = 20 ↓パース後の値を保存するクラス。 最終的には上の例だとこれのインスタンスが3個取得できればいい。 public class Property { public stri
YoutubeでひたすらBlederチュートリアルを見て、苦節4時間何とかそれなりに歩いているように見えるようになった。 Unityに持って行ったら手足の動き(rotation)が完璧に狂っている。 Colldaの出力がおかしいのかFBXコンバーターがおかしいのか。。。うーーーむ Blenderでみたら正常。 Unityでみたらおかしい。 3D関係は自分でやってみるまで本当に動くかどうかわからないからな。。。。 しっかしウェイトペイントは意外と手間がかかる。Autoでだめだめだったので自分でちまちま塗っていたら3時間かかった。 少し動かしてはおかしいところをペイントし直し。 これでもプロの目から見れば失笑ものだろう。でもとりあえず歩いているように見えるのでこれで良しとする。 Blender --> Unity Blender --(.dae)--> FBX Converter --(.fb
SlimMathをテストしていて気がついたのだが2つのクオータニオンの間の角度がどうも考えていたのと違う。 心の師匠であるJasonGregoryのGameEngineArchtectureによると θ = acos(dot(p,q)) 。私も今までこれで何の疑問もなかったのだがユニットテストを書いていたらどうも値が違う。 下の2つのクオータニオンの角度を上式で計算すると45.0が返ってくる。 var p = new Quaternion (new Vector(0,1,0), 0); // 0度 var q = new Quaternion (new Vector(0,1,0), Math.PI/2.0f); // 90度 期待しているのは当然90度なのである。あちこち調べ回ったがどこを見てもJasonGregoryの式と同じ式が書いてある(そりゃそうだ)。 2時間ほど探し回ってようやく
http://unity3d.com/mobile/ $400だったモバイル版のUnityが4/8までの期間限定でフリー。 (この期間にライセンスを取得すれば4/8以降もそのまま使える) PC版はフリーライセンスがあったがモバイル版がフリーで使えるのは初めて。 というわけで早速試してみた。 (昨日はアクセスが集中してサーバーダウンしていたせいで落とせなかった^^;) 上記のサイトからUnity本体とAndroidをセレクトして購入($0)すると電子メールでURLとライセンスキーが送られてくる。 Unity本体はすでにインストール済みなのでUnityを起動して「Help」ー「Enter Serial Number」からライセンスキーを登録するとAndoird向けにビルドできるようになる。 Android SDKのセットアップ 当然Android SDKが必要。以前にセットアップしたのがあるの
申し込んでいたPlayStation Suite SDKのクローズドβテストが通った。 個人開発(完全に趣味)だがOKなようだ。太っ腹だな。 で、このBlogにSDKキターとか書いていいものかどうか迷ったが、ライセンスを読む限り別に問題ないようだ。 5. CONFIDENTIALITY You shall hold the PS Suite SDK itself and any other information provided, from time to time, to you from SCE or SCE’s affiliated companies designated as “Confidential” ("Confidential Information") in confidence, using reasonable care to maintain the confi
Unityでシーンを作るのに手っ取り早く建物が欲しい。そういう時はGoogleのSketchUpを使うのが多分一番簡単。 Googleの3DギャラリーでSketchUpで作ったモデルが大量に公開されていて簡単に取り込める。 SketchUpにはフリー版とプロ版があって前者でエクスポートできる形式はCollada(.dae)のみ。 困ったことに.daeで出力してUnityでインポートしても何も表示されない。 いろいろ調べると他の人も同様の症状のようだ。 http://answers.unity3d.com/questions/165513/importing-sketchup-colladadae-into-unity.html http://forum.unity3d.com/threads/38643-a-plea-for-SketchUp-Collada-support-(again)
Blenderで作成した複数のアニメーション・クリップ(Blender用語ではアクション)がUnityにインポートすると1個しかない問題が苦節2時間ようやく解決した。 (BlenderでFBXでエクスポートしてUnityでインポートすると大丈夫だが、Unityから直接.blendをインポートすると駄目) Action Editorのアクション名が表示される所の右に[F](ポップアップはSave this datablock even if it has no users)をクリックして有効にすると全部Unityに持ってこられる。 Unity-BlenderToFBX.pyの設定は2.59以降の所を少しだけ修正してuse_anim_action_all=Trueにuse_default_take=Falseにする。 これでOK. Unityから一発で.blendをインポートして即使える。うむ
建物とか動かない物体ならSketchUp(.dae) --> Adobe FBX Converter(.fbx) --> UnityでOK. 多少Unity上で微修正が必要な事もあるが実用上問題ない。 Googleの3Dギャラリーが使えるので何でもUnityに持ってこれる。 それに対してキャラクターは3Dギャラリーで公開されているモデルにボーンを入れてアニメーションをつける必要がある。 それにはBlenderを使うのが鉄板。流れとしてはこうなる。 SketchUp(.dae) --> Blender(.fbx) --> Unity 作業はすべてWindows上で行う。やってみるとわかるがこれがうまくいかない^^; まずSketchUp(8)で出力したColladaファイルをBlender(2.61)でインポートすると落ちる! 他人が同じような苦労をしなくて住むようにこうすれば100%うまく
Unityで使えるスクリプトはJavaScriptとC#(とBoo)。 Booは初めて聞いたがWikipediaを見たらPython臭がしたので速攻で閉じた。忘れよう JavaScriptとC#の比較はここがわかりやすい。 http://answers.unity3d.com/questions/12911/what-are-the-syntax-differences-in-c-and-javascrip.html http://answers.unity3d.com/questions/7567/is-there-a-performance-difference-between-unitys-j.html ざっくり読むとJavaScriptの利点はC#より読みやすい、C#の利点はJSより機能が豊富。 あとVisualStudioが使える。ただしExpressEditionはUnityか
Unityにモデリング機能は当然無いので何らかのモデリングソフトでキャラクターを作ってUnityにインポートする必要がある。 フリーで最強はBlenderだろう。プロでも十分使える(というか元々はプロ用のプロプライエタリなソフト)高機能なモデリングソフトだ。 その分初心者には使いにくかったりするが...かくいう私も2.49まではUI生理的に受け付けずメタセコイアやMilkShape3Dを使っていたり。 2.5.xになって大分使いやすくなった。というわけでレッツトライ。 良くないエクスポート 適当にロボットを作ってFBX形式でエクスポートする。 ファイル形式は他にもいろいろあるがいろいろドキュメントを読んでいるとFBXが標準っぽい。 モデルはこんな感じ。 FBXのエクスポート。デフォルトではカメラやライトを含めてシーン全体をエクスポートするので、 「Selected Objects」にチェッ
次のページ
このページを最初にブックマークしてみませんか?
『d.hatena.ne.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く