動いて弾が撃てるようになったので、破壊可能なターゲットを設置して弾を当てることで破壊できるようにする。
ので以下の内容を実装する。
①武器オブジェクトから弾丸オブジェクトを生成する際に、武器オブジェクト内で保有するステータスを元に弾丸を生成する。
→これによって武器オブジェをいじることによって、撃ち出される弾丸を替えれる。
②ターゲットに弾丸オブジェクトと当たった際に、弾丸の威力を参照し、その分だけHPを減らす
③ターゲットのHPがなくなったら破壊
①
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
ublic class Weapon : MonoBehaviour { public GameObject bullet; public string fireButton; public int rateOfFire = 10; private int delayTime = 0; public float speed = 100; public float damage = 100; public int effectiveTime = 30; void Update () { /*射撃ボタン1が押されているとき*/ bool fire = Input.GetButton (fireButton); if (fire == true) { if (delayTime <= 0) { delayTime = rateOfFire; //弾を出現させる位置を取得 Vector3 placePosition = this.transform.position; //出現させる位置をずらす値 Vector3 offsetGun = new Vector3 (0, 0, 3); //武器の向きに合わせて弾の向きも調整 Quaternion q1 = this.transform.rotation; //弾を90度回転させる処理 Quaternion q2 = Quaternion.AngleAxis (90, new Vector3 (1, 0, 0)); Quaternion q = q1 * q2; //弾を出現させる位置を調整 placePosition = q1 * offsetGun + placePosition; //弾生成! GameObject tmpBullet = Instantiate (bullet, placePosition, q) as GameObject; Bullet b = tmpBullet.GetComponent<Bullet> (); b.Create (damage,speed,effectiveTime); } } if (0 < delayTime) { delayTime--; } } } |
インスタンスでオブジェクトを生成する際に、GameObject型として代入しておく。
こやつをBullet型に置き換えれば・・・
Bulletオブジェクトで用意しておいた公開関数・変数を使用したり代入できます。
②③
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class UnitManagement : MonoBehaviour { private float hp = 1000; private float maxHp; void Start () { maxHp = hp; gameObject.GetComponent<Renderer> ().material.color = new Color (1f,0f,0f); } void OnCollisionEnter(Collision hit){ if (hit.collider.CompareTag("Bullet")) { Bullet bullet = hit.gameObject.GetComponent<Bullet> (); hp = hp - bullet.damage; if (hp < 0) { hp = 0; } gameObject.GetComponent<Renderer> ().material.color = new Color (hp/maxHp,0f,0f); } } void Update () { if (hp <= 0) { Destroy (this.gameObject); } } } |
当たり判定は OnCollisionEnterで取得
引数のCollision型をBulletオブジェクトに置き換えれば①同様に後はどうとでもなる。
簡単にオブジェクト型を変えれるGetComponet関数が最強に使いやすい。
他にもオブジェクト型を変える方法はあるんだろうけどとりあえずはこいつを使いまくってこうと思う。
あと変数の定義がテキトーすぎなのは(公開範囲とか)許してくだちー
そんなこんなでこう
HPの残量が分かるようにターゲットの色をだんだん変えるようにしました。
以上です。
コメント