private void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Bullet") { //当たった魔法の情報を取得 BulletDataSO.BulletData bulletData = other.gameObject.GetComponent <BulletController>().bulletData; if (bulletData.no == 0) { Damage(bulletData); } else if (bulletData.no == 1) { enemy = GameObject.FindGameObjectsWithTag("Enemy"); Instantiate(other.gameObject.GetComponent <BulletController>().bulletDataSO.bulletDataList[2].bulletPrefab, new Vector3(gameObject.transform.position.x, 2, gameObject.transform.position.z), Quaternion.identity); for (int i = 0; i < enemy.Length; i++) { enemy[i].GetComponent <EnemyController>().Damage(bulletData); } } } if (other.gameObject.tag == "MainCamera") { ChangeAttackFlag(); } }
public void Shot(Vector3 dir, BulletDataSO.BulletData bulletData, BulletDataSO bulletDataSO) { this.bulletData = bulletData; this.bulletDataSO = bulletDataSO; GetComponent <Rigidbody>().AddForce(dir); Destroy(gameObject, 2f); }
/// <summary> /// バレットの制御 /// EnemyController /// PlayerController /// </summary> /// <param name="direction"></param> /// <param name="bulletData"></param> public void ShotBullet(Vector3 direction, BulletDataSO.BulletData bulletData = null) { //引数よりバレットの情報を取得し、どのようなバレットであるのか振る舞いを決定 this.bulletData = bulletData; //バレットのデータがない場合 if (this.bulletData == null) { //ここで処理を終了する return; } //バレットの画像を決定 imgBullet.sprite = this.bulletData.bulletSprite; //追尾玉のみ処理する if (bulletData.bulletType == BulletDataSO.BulletType.Player_Blaze) { //発射時にゲーム内にいるエネミーの情報を取得 GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy"); //エネミーが1体以上いるなら if (enemies.Length > 0) { //一番近いエネミーとして、配列の最初のエネミーの位置情報を仮に登録 nearPos = enemies[0].transform.position; //すべてのエネミーの位置を一つずつ順番に確認 for (int i = 0; i < enemies.Length; i++) { //現在の順番のエネミーの位置の情報を代入 Vector3 pos = enemies[i].transform.position; //現在のエネミーの位置とnearPosの比較をして、画面下(プレイヤー)に近いものを if (nearPos.x > pos.x && nearPos.y > pos.y) { //nearPosとして更新する nearPos = pos; } } //追尾するターゲットありとし、Updateメソッドを動くようにする isTarget = true; } } //追尾弾以外 if (bulletData.bulletType != BulletDataSO.BulletType.Player_Blaze) { //バレットのゲームオブジェクトにアタッチされているRigidbody2Dを取得してAddForceメソッドを実行する GetComponent <Rigidbody2D>().AddForce(direction * this.bulletData.bulletSpeed); } //5秒後にバレットを破壊する Destroy(gameObject, 5f); }
/// <summary> /// 魔法が当たった時のダメージ処理 /// </summary> public void Damage(BulletDataSO.BulletData bulletData) { int itemDrop = Random.Range(0, 100); //敵のHPを減算、HP量にHPバーを同期 //attackLevelが1上がる毎に魔法の攻撃力が5ずつ上昇 hp -= bulletData.power + GameLevel.instance.attackLevel * 5; BGMmanager.instance.PlaySE(); UpdateHpBarValue(hp, maxHp); //HPが0になったら魂を生成して敵を破壊 if (hp <= 0) { hp = 0; enemyGenerator.DecreaseEnemyCount(); //ボスモンスターの場合 if (isBoss == true) { //ボス撃破フラグの切り替え gameMaster.ChengeBossClear(); enemyGenerator.isBossBattle = false; } //サーチ用エネミーリストからデータ削除、対応するインジケータの非表示 //enemySearch.enemyList.Remove(enemyList[enemyNo]); // インジケーター表示対象をオフ if (targetIndicator != null) { targetIndicator.ResetTarget(); } //searchArrow.GetComponent<Image>().enabled = false; //倒した敵の魂の生成、設定 GameObject soul = Instantiate(downEffect, gameObject.transform.position + soulPos, Quaternion.identity); soul.GetComponent <DefeatEffect>().SetUpSoul(target); //アイテムを落とすかの判定 if (itemDrop < 10) { EnemyDropItem(); } gameMaster.CheckStageClear(); Destroy(gameObject); } }
BulletDataSO.BulletData SelectMagic() { BulletDataSO.BulletData bulletData = null; if (useHighMagic == true) { bulletData = bulletDataSO.bulletDataList[1]; } else { bulletData = bulletDataSO.bulletDataList[0]; } return(bulletData); }
/// <summary> /// エネミーの追加設定 /// </summary> /// <param name="enemyGenerator"></param> /// <param name="bulletData"></param> public void AdditionalSetUPEnemy(EnemyGenerator enemyGenerator, BulletDataSO.BulletData bulletData) { //引数で届いた情報を変数に代入してスクリプト内で利用可能にする this.enemyGenerator = enemyGenerator; //MoveEventSOスクリプタブルオブジェクトのGetMoveEventメソッドを実行し、戻り値で移動用のメソッドを受け取る moveEvent = this.enemyGenerator.moveEventSO.GetMoveEvent(enemyData.moveType); moveEvent.Invoke(transform, enemyData.moveDuration); if (bulletData != null && bulletData.bulletType != BulletDataSO.BulletType.None) { StartCoroutine(EnemyShot(bulletData)); } }
private bool isCostPayment; //現在コストを支払って開放済かどうか。 trueならコスト支払い完了。 public void SetUpBulletSelectDetail(BulletSelectManager bulletSelectManager, BulletDataSO.BulletData bulletData) { this.bulletSelectManager = bulletSelectManager; this.bulletData = bulletData; //画像変更 imgBulletBtn.sprite = this.bulletData.btnSprite; //ボタンにメソッド登録 btnBulletSelect.onClick.AddListener(OnClickBulletSelect); //バレットを選択できない状態にきりかえる SwitchAcriveBulletBtn(false); //バレットを発射できる時間の設定をし、初期値とする initialLaunchTime = this.bulletData.launchTime; //バレットの発射できる時間を初期値から設定する launchTime = initialLaunchTime; //バレットの発射できる残り時間のゲージ表示を0にして非表示にする。 imgLaunchTimeGauge.fillAmount = 0; //バレット選択ボタンを推せるようにするために必要なExpを表示 txtOpenExpValue.text = this.bulletData.openExp.ToString(); //初期バレット確認 if (this.bulletData.openExp == 0) { //初期バレット用の設定 isDefaultBullet = true; //装填中の状態に切り替える ChangeLoadingBullet(true); TurnActiveOpenExpValue(false); SwitchAcriveBulletBtn(true); // TODO そのほかに設定する処理を追加 } //拝啓の属性画像の変更 imgElementTypeBackground.sprite = bulletSelectManager.GetElementTypeSprite(this.bulletData.elementType); }
/// <summary> /// クリックした場所に向かって魔法を発射 /// </summary> private void ShotBullet() { BulletDataSO.BulletData bulletData = null; GameObject bullet = null; bulletData = SelectMagic(); bullet = Instantiate(bulletData.bulletPrefab, transform.position, Quaternion.identity); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector3 worldDir = ray.direction; bullet.GetComponent <BulletController>().Shot(worldDir.normalized * bulletData.speed, bulletData, bulletDataSO); if (bulletData.no == 1) { useHighMagic = false; } }
/// <summary> /// バレットの自動生成 /// </summary> /// <param name="bulletData"></param> /// <returns></returns> private IEnumerator EnemyShot(BulletDataSO.BulletData bulletData) { while (true) { //エネミーのバレットのクローンを生成し、戻り値をbulletObjに代入 GameObject bulletObj = Instantiate(enemyBulletPrefab, transform); //クローンのゲームオブジェクトからBulletスクリプトを取得してShotBulletメソッドを実行する bulletObj.GetComponent <Bullet>().ShotBullet(enemyGenerator.PreparateGetPlayerDirection(transform.position), bulletData); if (enemyData.moveType == MoveType.Boss_Horizontal) { //バレットとエネミーの親子関係を解消し、バレットの親をTemporaryObjectContainerオブジェクトに変更する bulletObj.transform.SetParent(TransformHelper.GetTemporaryObjectContainerTran()); } yield return(new WaitForSeconds(bulletData.loadingTime)); } }
private void PreparateGenerateBullet(Vector3 direction) { //現在使用しているバレットの情報を取得 BulletDataSO.BulletData bulletData = GameData.instance.GetCullentBulletData(); //バレットの種類(BulletType)を元に決定 switch (bulletData.bulletType) { //BulletTypeがPlayer_NormalまたはPlayer_Blazeの場合(処理が同じ場合にはこのように記述できる case BulletDataSO.BulletType.Player_Normal: case BulletDataSO.BulletType.Player_Blaze: GenerateBullet(direction, bulletData); break; //BulletTypeがPlayer_3ways_Piercingの場合 case BulletDataSO.BulletType.Player_3ways_Piercing: for (int i = -1; i < 2; i++) { //3方向に扇状に発射する GenerateBullet(new Vector3(direction.x + (0.5f * i), direction.y, direction.z), bulletData); } break; //BulletTypeがPlayer_5ways_Normalの場合 case BulletDataSO.BulletType.Player_5ways_Normal: for (int i = -2; i < 3; i++) { //5方向に扇状に発射する GenerateBullet(new Vector3(direction.x + (0.25f + i), direction.y, direction.z), bulletData); } break; } }
/// <summary> /// 使用するバレットのデータを設定 /// </summary> /// <param name="bulletData"></param> public void SetBulletData(BulletDataSO.BulletData bulletData) { cullentbulletData = bulletData; }
/// <summary> /// バレットの生成 /// </summary> /// <param name="direction">弾の方向</param> /// <param name="bulletData">弾の振る舞い</param> private void GenerateBullet(Vector3 direction, BulletDataSO.BulletData bulletData) { //Bulletスクリプトにてバレットを生成し、ShotBulletメソッドを実行する Instantiate(bulletPrefab, transform).ShotBullet(direction, bulletData); SoundManager.instance.PlayVoice(SoundDataSO.VoiceType.Attack); }