【Unity】弾丸のスクリプト【JavaScript】
今、シューティングゲームを作っているんだが、結構便利そうな「弾」のスクリプトが作れたのでメモしておく
#pragma strict public var forEnemy : boolean;//敵に対してダメージになるか public var forHero : boolean;//プレイヤや味方に対してダメージになるか public var effect : GameObject;//着弾エフェクト public var damage : float;//ダメージの値 public var shock : float;//蓄積する怯み値 public var speed : float;//弾速(5~100) public var range : float;//射程(2~100) public var chase : float;//追尾の回転力(1~20) private var timer : float;//射程限界のタイマー public var target : GameObject;//Muzzle側のscriptから指定 function Start () { timer = 0.0f;//タイマー初期化 } function Update () { this.transform.Translate(0,0,speed*Time.deltaTime);//指定され方向に弾が飛んでいく //ターゲットに向けて少しずつ回転 this.transform.rotation = Quaternion.Slerp( this.transform.rotation, Quaternion.LookRotation(target.transform.position - this.transform.position), chase*Time.deltaTime); timer += Time.deltaTime;//弾の存在時間カウント if(timer >= (range/speed)){//射程限界超えたら Destroy(this.gameObject); } } function OnTriggerEnter(hit : Collider){//敵に当たったら消える var enemyAcount :Account;//敵のアカウント var efNow : GameObject;//着弾エフェクト if(forEnemy==true && hit.gameObject.tag == "Enemy"){//damageを与えたい敵に当たったら enemyAcount = hit.gameObject.GetComponent("Account");//敵のアカを取得 //ダメージ enemyAcount.data -= damage * (enemyAcount.defence + enemyAcount.defenceSupport ); //ここに衝撃計算も //着弾エフェクト efNow = GameObject.Instantiate(effect); effect.transform.position = this.target.transform.position; Destroy(this.gameObject);//弾を消す }else if(forHero==true && hit.gameObject.tag == "Player"){ enemyAcount = hit.gameObject.GetComponent("Account");//敵のアカを取得 //ダメージ enemyAcount.data -= damage * (enemyAcount.defence + enemyAcount.defenceSupport ); //ここに衝撃計算も //着弾エフェクト efNow = GameObject.Instantiate(effect); effect.transform.position = this.target.transform.position; Destroy(this.gameObject);//弾を消す } if(hit.gameObject.tag == "Wall"){ //着弾エフェクト efNow = GameObject.Instantiate(effect); effect.transform.position = this.transform.position; Destroy(this.gameObject);//弾を消す } }
基本的にスクリプト内で定義されていないものは発射のInstantiate()を呼び出す側のスクリプトから呼び出して使う感じで