座標を補正するエディタ拡張的なもの
Unity Game Jamで作ったゲームが動かず悔しかったので、
同じゲームデザインで作り直してみた。
そのとき、ステージを作るのが面倒くさくなってきたので、
エディターを拡張してちょっと楽してみた。
■拡張内容現状のデモ
http://goo.gl/XRNoQ
やったのは、GameObjectを配置した際に
GameObjectの位置を整数に直すだけ。
0.794とか微妙な位置に置いたものを1に補正してくれるので、
ステージ作成が大分楽になった。
やった内容は、こんな感じ
1.適当なスクリプトをプレハブに登録
(未拡張ならなんでも良い。内部処理無くてもいい)
2.適当なスクリプトを拡張し、OnDisableメソッドを登録
3.OnDisableに位置情報を整数型に補正するコードを記述
これで地面ブロック等をおいた時に自動的に位置を補正してくれる。
標準機能であったみたい
[Unity3D]続・GameObjectの座標を補正する
http://terasur.blog.fc2.com/blog-entry-205.html
■位置情報を補正するときの注意点
位置情報を補正する際、ちょっとハマったのが数値の丸め処理。
C#は単純にfloatからintに丸めても四捨五入してくれない。
(0.9 -> 0, 1.2 -> 1, -1.9 -> -1等)
なので、キャストする際に0.5を加算・減算してやる必要がある。
無いよりは遥かにマシになるんだけど、x = transform.position.x;
if( x > 0){ x += 0.5f; }
else if( x < 0){ x -= 0.5f; }
int posX = (int) x;
正直、もうちょっと上手くできそうな気がする。うーん
こっちの方がスマートですね。float posX = Mathf.Round(transform.position.x )
情報感謝
ゲームジャム中に色々なトラブルでPCが動かなくなる事を想定して
ある程度の仕込みはネットに上げておこう(教訓)