Easy Coding

ノートみたいなもの。

【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()を呼び出す側のスクリプトから呼び出して使う感じで