本日はUnity 2Dの記事です。
例えば敵キャラに攻撃がヒットした時に、その位置に「Hit!!」等と出力し、数秒後に消えるようなことをしたい時のやり方を探りました。
なかなか、Destroyの処理がうまくいかなかったので、以下覚書の意味で紹介します。
まず、失敗した例です。
まず、キャンバスとテキストの組み合わせを
プレハブ化しました。
それから、
public Canvas PoinUI;
var obj = GameObject.Instantiate(DispUI);
このようにインスタンス化して、任意の位置など設定した後、最後に
2秒後に消えるように
Destroy(obj, 2);
と記述したのですが、実行時に以下のエラーがでてしまいました。
Can’t remove Canvas because CanvasScaler (Script) depends on it
そこで、このようにしました。
Destroy(obj.GetComponent<CanvasScaler>(),2);
Destroy(obj, 2);
消えるようになったのですが、アプリの終了時にエラーになってしまいます。
Unity上で実行したのですが、Unity自体がバグレポートを出力しておちてしまいます。このやり方は、よくないのでしょうか。
そこで、うまくいった例ですが、キャンバスの下のテキストだけをプレハブ化します。
public Text text;
public Canvas canvasParent;
var obj2 = GameObject.Instantiate(text);
インスタンス化した後、親のキャンバスに紐づけます。
obj2.transform.SetParent(canvasParent.transform);
別途位置の設定などをした後
Destroy(obj2, 2);
うまく、2秒後に消えるようになりました!
Android無料アプリ シャボン玉宇宙冒険
シャボン玉を武器に、宇宙を進め!
ストレス発散に!・・なることを祈って!
https://play.google.com/store/apps/details?id=com.tuffyz.bubbleswar