2014年03月27日

[Unity] Behaviour is missing! の原因オブジェクトの見つけ方

ゲームオブジェクトにスクリプトを適用したけど、何かしらの理由でその参照が外れたときに
ゲームをプレビューすると

The referenced script on this Behaviour is missing!

という警告が表示されます↓

20140327missing01.png

対処方法は、@Aのどちらかです。

@参照が切れているゲームオブジェクトを探し出してスクリプトを再度適用する
Aスクリプトへの参照を削除する

まずは、ゲームオブジェクトを探すのですが、
先ほどの警告をダブルクリックします↓

20140327missing02.png

すると、シーンビューでは対象となるオブジェクトが選択された状態になります。
なんて便利!
Inspectorを見ると、たしかにスクリプトへの参照が切れてました。

20140327missing03.png

ここで再度スクリプトを適用すれば@の対処となります。

スクリプトへの参照を削除したいとき(Aの対処)は、
歯車のボタンを押してから「Remove Component」を選択します。

20140327missing04.png

長く使ってきて、この探し方に気づかなかったー。
posted by be-style at 13:01| Comment(0) | Unity

2014年01月28日

[Unity] NGUIでラベルの大きさが変わらないときの対処

NGUI3.0.8 f7 の話。

UILabelを使って文字を表示してみたけど、fontSizeの値を大きくしても文字が拡大されない。
TTF(True Type Font)を使っているのに問題ないはずなのに。。。

そんなときは、「Dimensions の範囲が狭い」という理由がありました↓

スクリーンショット 2014-01-28 19.32.58.png

Dimensionsの範囲を広くしたら、UILabelの文字もちゃんと拡大されました。
めでたしめでたし。

プログラムからDimensionの値を変えないときは、
UIWidgetクラスのwidth, heightを変えます。

例)
GameObject obj = GameObject.Find("[NGUIのUILabelを適用したオブジェクト]") as GameObject;
UIWidget wg = obj.GetComponent<UIWidget>();
// Dimensionsの範囲を変更
wg.width = [任意の幅];
wg.height = [任意の高さ];

気づくまでに時間がかかって、結構ハマりました。
posted by be-style at 19:44| Comment(0) | Unity

2013年11月07日

[Unity] 実行時エラー(The thing you want to instantiate is null)の対処

Editorでプレビューしたときはちゃんと動いたのに、いざiOSの実機で動かそうとしたときに
下記の実行時エラーが出たときの対処法。

------------------------------------------
ArgumentException: The thing you want to instantiate is null.
at UnityEngine.Object.CheckNullArgument (System.Object arg, System.String message) [0x00000] in :0
at UnityEngine.Object.Instantiate (UnityEngine.Object original) [0x00000] in :0
at [自作クラス].Start () [0x00000] in :0
------------------------------------------

■原因 ※C# で記述しています
・Instantiate() を呼ぶときに、引数にプレファブを渡す
・このプレファブが「public GameObject xxx;」と宣言されていた

■対処
・Instantiate() に渡すプレファブについて、Resources/ 以下にプレファブを置いて、そこを参照するように変更した
■プログラム ※必要部分だけ抜粋
【誤】
public GameObject [プレファブ名];
void Start() {
GameObject obj = Instantiate("[プレファブ名]") as GameObject;
}
【正】
void Start() {
GameObject obj = Instantiate(Resources.Load("[プレファブ名]")) as GameObject;
}

でも、どうしてエディタ上でOKで、実機ではダメなんだろう。。。

■参考
http://hissi.org/read.php/gamedev/20120216/WEVXK2RUYTI.html
posted by be-style at 00:48| Comment(0) | Unity