テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

座標を補正するエディタ拡張的なもの

Unity Game Jamで作ったゲームが動かず悔しかったので、
同じゲームデザインで作り直してみた。
スクリーンショット 2012-07-09 23.41.37

そのとき、ステージを作るのが面倒くさくなってきたので、
エディターを拡張してちょっと楽してみた。

現状のデモ
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が動かなくなる事を想定して
ある程度の仕込みはネットに上げておこう(教訓)