Unity2D ヒットした時にTextを表示して数秒後に消したい。

本日は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無料アプリ シャボン玉宇宙冒険

シャボン玉を武器に、宇宙を進め!

ストレス発散に!・・なることを祈って!

image

https://play.google.com/store/apps/details?id=com.tuffyz.bubbleswar

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です