Unity のスプライトや、ゲーム開発においての初心者あるある。
主に2Dゲーを作ろうとしたときに、スプライトの端に隣のテクセルが見切れてしまうような現象に出会ってしまった場合、
テクスチャのサイズをPOW2(2累乗サイズ)にしていないかを確認しよう。
1 / 2 / 4 / 8 / 16 / 32 / 64 / 128 / 256 / 512 / 1024 / 2048 / 4096 など
POW2のサイズに余白を足してでもテクスチャを広げてみよう。
浮動小数が割り切れる数になるため、端数がでて変な見切れは発生しなくなる。
NGUI の UIPanel のサイズを知る方法
Unity 上の Clipping の Size に当たる部分は、
で取得する。
UIPanel panel = (UIPanel) GameObject.Find("YourObj").GetComponent("UIPanel");
float pw = panel.clipRange.w;
float ph = panel.clipRange.z;
で取得する。
You can't place widgets on a layer different than the UIPanel that manages them. を解決する方法
スクリプトでアトラスプレハブを読み込み、
それを作成したスプライトに割り当てようとしたら
以下の警告が出たが、解決したのでメモ。
[Warning]
-----------------------------------------
You can't place widgets on a layer different than the UIPanel that manages them.
If you want to move widgets to a different layer, parent them to a new panel instead.
-----------------------------------------
スプライトを作る時は NGUITools.AddSprite を使おう。
それを作成したスプライトに割り当てようとしたら
以下の警告が出たが、解決したのでメモ。
[Warning]
-----------------------------------------
You can't place widgets on a layer different than the UIPanel that manages them.
If you want to move widgets to a different layer, parent them to a new panel instead.
-----------------------------------------
// このコードは警告が表示される (This code is displayed warning.)
//---------------------------------------------------------------
GameObject obj = new GameObject ("SpriteObjName");
UISprite sp = obj.AddComponent <uisprite> ();
sp.atlas = yourLoadedAtlas;
sp.spriteName = "yourSpriteName";
obj.transform.parent = GameObject.Find("yourParentOfTheSprite").transform;
// このコードは大丈夫 (This code have not warning.)
//---------------------------------------------------------------
UISprite sp = NGUITools.AddSprite ( GameObject.Find("yourParentOfTheSprite"), yourLoadedAtlas, "SpriteObjName" );
sp.spriteName ="yourSpriteName";
スプライトを作る時は NGUITools.AddSprite を使おう。
NGUI のアトラスプレハブをスクリプトから読み込む時
NGUI の AtlasMaker でアトラスとスプライトを作成すると、
プレハブとシェーダと統合画像が同名になる為、
GameObject prefab = GameObject.Instantiate ( Resources.Load("your atlas" );
のようにすると、Unity が正しく認識できない場合がある。なので、この場合は
GameObject prefab = GameObject.Instantiate ( Resources.Load("your atlas", typeof (GameObject) );
と、後ろに GameObject の型指定のパラメータを付けてやる。NGUI で新しいスプライトをアトラスに登録する方法
※ この記事を書いた時点での NGUI のバージョンは、「 2.6.4 」
1. 「メニュー」の「NGUI」 > 「Open the Atlas Maker」を選択。
2. 「Create」ボタンの右のテキストフォームに新しく作りたいアトラスセットの名前を入力し
「Create」ボタンを押すと、それ用のプレハブが作成される。
3. 自分でアトラス化した画像を使うのではなく、
このアトラスセットに画像 1 つ 1 つを登録すると NGUI 側で 1 枚のスプライトにまとめてくれる。
また、PNG で逐一用意せずとも、PSD ファイルのままで良い。
4. 「Project」ビューから追加したい画像をクリックすると、
AtlasMaker ウィンドウの下部にそのスプライト名が表示され、
緑の「Add/Update All」ボタンが出現するので、このボタンを押す事で
そのスプライトがアトラスセットに追加される。
5. UV などテクスチャ座標はNGUIがざっくり決めてくれるが、別途変更したい場合は、
Projectビューのアトラスのプレハブ( 立方体を斜め絡みたようなアイコン )をクリックし、
Inspectorの下の方にある「Dimensions」で設定する。
その下にある「Border」は Sliced スプライトにしたい時の境界線を決める。
「Sprite ▼」を押すと、アトラスセットに追加したスプライトの中から、
どのスプライトの情報を変更するかが選択できる。
なお、各数値はまとめられた画像に合わせたものとなる。元画像の座標云々は登録後は関係ない。
まとめられた画像を PhotoShop 等で開いて確認したければ、
「~~ atlas」というプレハブと同じ名前で画像も作成されているので、
Projectビューのそれを右クリックし、「Show in Explorer」した後、他のツールで開く事ができる。
これを繰り返して自分好みのアトラスセットを作成していく。
1. 「メニュー」の「NGUI」 > 「Open the Atlas Maker」を選択。
2. 「Create」ボタンの右のテキストフォームに新しく作りたいアトラスセットの名前を入力し
「Create」ボタンを押すと、それ用のプレハブが作成される。
3. 自分でアトラス化した画像を使うのではなく、
このアトラスセットに画像 1 つ 1 つを登録すると NGUI 側で 1 枚のスプライトにまとめてくれる。
また、PNG で逐一用意せずとも、PSD ファイルのままで良い。
4. 「Project」ビューから追加したい画像をクリックすると、
AtlasMaker ウィンドウの下部にそのスプライト名が表示され、
緑の「Add/Update All」ボタンが出現するので、このボタンを押す事で
そのスプライトがアトラスセットに追加される。
5. UV などテクスチャ座標はNGUIがざっくり決めてくれるが、別途変更したい場合は、
Projectビューのアトラスのプレハブ( 立方体を斜め絡みたようなアイコン )をクリックし、
Inspectorの下の方にある「Dimensions」で設定する。
その下にある「Border」は Sliced スプライトにしたい時の境界線を決める。
「Sprite ▼」を押すと、アトラスセットに追加したスプライトの中から、
どのスプライトの情報を変更するかが選択できる。
なお、各数値はまとめられた画像に合わせたものとなる。元画像の座標云々は登録後は関係ない。
まとめられた画像を PhotoShop 等で開いて確認したければ、
「~~ atlas」というプレハブと同じ名前で画像も作成されているので、
Projectビューのそれを右クリックし、「Show in Explorer」した後、他のツールで開く事ができる。
これを繰り返して自分好みのアトラスセットを作成していく。
Unity + NGUI + TweenScale でクリッピングが効かなくなる
ダイアログを NGUI で作ったので、出現時の演出でもと
NGUI の Example に入っている TweenScale を使用してスケーリングさせる事にした。
が、スケール中クリッピングしているテキストがもりっとエリアをはみ出して表示されてしまい困った。
結果、XY だけではなく Z もスケール比率を合わせてやらないと正しく表示されなかったのでメモ。
NGUI の Example に入っている TweenScale を使用してスケーリングさせる事にした。
が、スケール中クリッピングしているテキストがもりっとエリアをはみ出して表示されてしまい困った。
結果、XY だけではなく Z もスケール比率を合わせてやらないと正しく表示されなかったのでメモ。