Unity で ダメージUI を作る(2D)
今回は、UnityにてダメージUIを作ってみました。
敵に攻撃した際やプレイヤーが攻撃を受けた際に、
受けたダメージの量を出してくれるものです。
出した後は、重力に従い下に落ちて消えます。
いろいろな実装の仕方があると思いますが、
自分がやってみた方法を一つ紹介したいと思います。
DmageTextプレハブの作成
Create Empty
で空のGame Object
を作成します。
名前をDamageText
とします。
Add Component
でText Mesh
とRigidbody 2D
をつけましょう。
Mesh Renderer
のText
に適当な数字と,
Font
を好きなものに変えます。
完成したらPrefabs
ディレクトリに入れておきましょう。
今、ゲームの実行画面では、以下のような感じです。
DamageTextを飛ばす&消す
次にこのDamageText
のスクリプトを作成します。
Add Component
でNew Script
をし、Scriptをつけます。
DamageTextSCR.cs
という名前にしました。
DamageTextSCR.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DamageTextSCR : MonoBehaviour { // Use this for initialization void Start() { GetComponent<Rigidbody2D>().AddForce(new Vector3(Random.Range(-80, 80), Random.Range(100, 180), 0)); StartCoroutine(DestroyObject()); } private IEnumerator DestroyObject() { yield return new WaitForSeconds(0.6f); Destroy(this.gameObject); } }
このスクリプトによって、生成時に上に'ぴょんっ'と跳ねて、
0.6秒後に破棄されます。
DamageTextをプレハブから生成する
もうほとんど完成なので、あとはこのDamageTextを
プレハブから生成してあげるだけです。
本来なら、Player
やEnemy
のDamage
関数に書けばいいのですが、
今回は試しにButtonが押されたら生成という風にしておきます。
Canvas
にButton
を設置し、
DamageButton.cs
を作成します。
DamageTextScr.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DamageButton : MonoBehaviour { public GameObject DamageText; public void OnClick() { // 発生位置(本来なら敵のtransform.position) 発生させたいテキスト Instantiate(DamageText, new Vector3(0,0,0), transform.rotation).GetComponent<TextMesh>().text = "1"; } }
スクリプトが完成したら、
Buttonの設定をして、DamageButtonスクリプトに
DamageText
prefabをドラッグ・アンド・ドロップで設定してあげれば完成です!
完成!
お疲れ様です。
読んでくれてありがとうございました。
もっと良い実装がありましたら、ぜひ教えてください;;!