スプライトの切り出し表示について【UUJ】

質問:
Sprite及びSpriteRendererを使用して、背景テクスチャ(1024×1024)から、指定サイズ(32×32)を切り出し、複数スプライトを並べて背景表示を行う処理を作成しています。
切り出したある部分に関しては、指定エリアの周りのピクセルも切り出してしまっているようで、表示した背景に余計なラインが入ってしまう状態になっています。

環境及び現在のスクリプトコード抜粋は、以下になります。

使用Unityバージョン
 Unity4(4.3.2f1)
 
スクリプトコード抜粋
 x = 1;
 y = 1;
 Rect rect = new Rect();
 rect.x = x * 32;
 rect.y = 1024 – (y * 32 + 32);
 rect.width = 32;
 rect.height = 32;
 Sprite sp = Sprite.Create(sprite_sheet, rect, new Vector2(0.0f, 0.0f), 1.0f );
 (sprite_sheetは、事前に割り当て済み)

sprite_sheetのインポート設定は、以下のとおりです。
 TextureType:Sprite
 SpriteMode:Single
 PackingTag:指定なし
 PixelsToUnits:1
 Pivot:Center
 FilterMode:Point 


回答:

sprite_sheetのインポート設定が FilterMode: Point になっているので、ラインはでなさそうですけどね。試しにやってみましたが、ポイントフィルタならラインは出ませんでした。

ただ、切り抜くサイズも4の倍数なのでDXTやETCの圧縮は大丈夫なのですが、PVRTCで圧縮するとまわりのピクセルを拾ってしまいます。ターゲットがiOSの場合は圧縮しないようにする必要があるかもしれません。


切り出しサイズや圧縮フォーマットも、スプライト切り出しに影響を与えるとは知りませんでした。ただ、今回はビルドターゲットをWindowsPCとし、圧縮フォーマットをDXT5にしています。試しに圧縮フォーマットをARGB32Bitにしてみましたが、特に変化は見られない状態です。


ピクセルバイピクセルになるようにもう一度試してみたら、確かに水平方向にラインが出ました。
スプライトの位置をカメラからの相対で整数値から0.5ずらしたらラインが消えました。

ただし、この対処方法は機種依存のようです。iOSの場合は0.5ずらすとラインが出てしまい、整数値ならラインは出ませんでした。Macを使っているので、Windowsだとラインの出方も変わってくるかもしれません。
…と思ったらスクリーンの解像度の問題だったようです。
スクリーンの高さを偶数にしたら、PCでも整数値でラインが出なくなりました。


こちらでも、カメラY位置を0.5加算して、表示させたところ、水平方向の不要なラインがでなくなりました。
この方法を対応策としたいと思います。

Comments

comments

スポンサーリンク
336*280px
336*280px

フォローする

スポンサーリンク
336*280px