sprite の multiple で 境界がおかしくなる

spriteの境目に線が入る

サンプル画像

上記画像をspriteで読み込んで32 x 32 で切り出してマップとして配置した。

サンプル画像

そうすると、境界線に青い線が入ってしまった。しかし、32 x 32 で切り出しがミスっているわけでもなく、描画して初めて発生する。

sprite の Filter Mode を設定

原因としては、Filter Mode というやつだ。
これがデフォルトだと Bilinear になっており、これは「テクスチャを近くでみたときにぼやける」設定らしい。
これを Point (テクスチャを近くでみたときにブロック状になる) に変更すればOK。参考

Filter Mode

Renderer の Materials を スクリプトから設定する

MeshRenderer などの Materials をスクリプトから動的に設定する。
普通にこうやればできるかなと思ったが、できず。

1
2
renderer.materials[0] = someMaterial1;
renderer.materials[1] = someMaterial2;

正解は以下。一度配列で取得して、配列としてセットし直すと動く。

1
2
3
4
Material[] mats = renderer.materials;
mats[0] = someMaterial1;
mats[1] = someMaterial2;
renderer.materials = mats;

2D画面に線を引く Line Renderer

Unity2D で 線を引きたかったので、Line Renderer を使ってみることにした。
「Add Component」 → 「Effects」→ 「Line Renderer」で追加できる。

Positions で 始点と終点の座標を指定し、Parameters で 色や太さを指定できる。
Unity4.5を使っているが、2DでEffectsを使うには Sorting Layer と Order In Layer をスクリプトから指定しないといけない。
例えば、以下のように指定する。

1
2
3
LineRenderer line = GetComponent<LineRenderer>();
line.renderer.sortingLayerName = "Effect";
line.renderer.sortingOrder = 1;

そして、Line Renderer の Materials を指定しなければいけない。
例えば、インスペクタビューからLine Rendererの Materials に Sprites-Defaultを指定する。
これで色もちゃんと反映されるし、描画もちゃんとされる。

背景をスクロールさせる

背景のスクロール

2Dゲームの背景の画像をスクロールさせて動いている感を出したい。スクロールはループして、常にぐるぐると動かしたい。

Turtorial - 2D Shooting Game 第06回 背景を作る

このチュートリアルが参考になる。しかし、「MaterialsフォルダにあるBackground-FrontをQuadにドラッグ&ドロップします」とあるのだが、
Background-Frontというマテリアルの作り方に関しては記載がない。というわけで、そのMaterialを自分で作る。

テクスチャの用意

まず、スクロールする画像をUnityのProjectにドラッグアンドドロップして読み込む。このとき、Texture Type が Sprite になっているので、これをTextureにする。そして、Wrap Mode を Repeat にすればOK。下記画像を参照。

Texture設定

ただし、このときプラットフォームをAndroidやiOSにしていると、「Graphics device doesn’t support Repeat wrap mode on NPOT textures.」と表示される。画像がNPOT(2の累乗のサイズ)じゃないので、Repeatにできないらしい。
仕方ないので、画像を 512 x 32 とか 256 x 128 とか、2の累乗のサイズにする。

マテリアルの作成

次に、Project の Create から Material を選択し、Material を作る。このMaterialに上記で作成したTextureを貼る。
そして、Material の Shader を 「Unlit / Transparent」 にすればOK。
あとは、例のチュートリアル通りでできた。

Custom Field Template で 動的にselect box を生成する

Custom Field Template の セレクトボックス と DBの連携

Custom Field Template を使っていて、DBの情報でセレクトボックスを生成したいことがあった。
そのため、動的にセレクトボックスを生成する必要がある。
JavaScriptからやるのは、面倒なのでやりたくない。どうにか Custom Field Template の機能でできないものかと検索したら出てきた。

http://wordpress.org/support/topic/plugin-custom-field-template-dynamic-select-list

PHP CODE オプション

つまり、Custom Field Template の PHP CODE の機能を使うことで実現できる。

1
2
3
4
[something]
type = select
code = 0
selectLabel = 選択してください

こういうふうに指定して、Custom Field Template の設定画面にある PHP CODE の 0 番目に以下のように記述すればOK。
$values に optionタグのvalue を、 $valueLabel に optionタグの中身を記述する。

1
2
3
4
5
$data = something() // dbから取得したと仮定
for($i = 0; $i < count($data); $i++){
$values[$i] = $data['id'];
$valueLabel[$i] = $data['name'];
}