error CS1010: Newline in constant

文字コードを変更して保存できるテキストエディタ( Terapad 等)で

文字コードを UTF-8 (BOMなし) にして保存すれば直る。

UTF-8N ではエラーが出たのでメモ。

なお、改行コードは関係ないようだ。

GameView内のマウス座標を得る方法

GameView はサイズによってマウス座標の値も変動するようで、

640*960 のプロジェクトをテストする際、GameView のサイズを狭くしてテストすると

マウス座標もそのサイズに依存して変わっているような状態になって困ったのでメモ。



// カメラオブジェクトを取得する
// 今回の例は NGUIのカメラを指定しているが、他のカメラの時も名前を合わせればよい
GameObject obj  = transform.Find("/UI Root (2D)/Camera").gameObject;

// マウス座標を縦横各種 0~1.0f の範囲に変換
Vector3    mpos = (obj.GetComponent<Camera>()).ScreenToViewportPoint ( Input.mousePosition );

// スクリーンサイズにその範囲をかければスクリーン上の座標が求まる
float xpos = mpos.x * PlayerSettings.defaultScreenWidth;
float ypos = mpos.y * PlayerSettings.defaultScreenHeight;


こうすると GameView のリサイズを気にしないでも大丈夫っぽい。

UnityEditor 内のクラスを使用しているが、iOS 実機でも動くのかは未検証。

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.
-----------------------------------------




// このコードは警告が表示される (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 の型指定のパラメータを付けてやる。