質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

10329閲覧

ランダムなタイミングで攻撃する敵を作りたい。

ark-T

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2017/09/13 11:00

編集2017/09/13 12:14

現在、Unityで3Dシューティングゲームを制作しています。
そこで質問させていただきたいのですが、敵が攻撃してくるタイミングをランダムにできないでしょうか。
具体的に言うと、敵が弾を撃ってくるときと撃ってこないときの両方が作りたいです。
敵のコードは以下です。

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class EnemyControl : MonoBehaviour { public GameObject EnemyBullet; public GameObject Explosion; float Z_Speed = 0; float intervalTime; void Start() { intervalTime = 0; Destroy(this.gameObject, 10); } void Update() { transform.Translate(0, 0, -1 * Z_Speed); //以下、攻撃用コード Quaternion quat = Quaternion.Euler(0, 180, 0); intervalTime += Time.deltaTime; if (intervalTime >= 0.2f) { intervalTime = 0.0f; Instantiate(EnemyBullet, new Vector3(transform.position.x, transform.position.y, transform.position.z), quat); } } void OnTriggerEnter(Collider coll) { if (coll.gameObject.tag == "PlayerBullet") { Instantiate(Explosion, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity); Destroy(this.gameObject); ScoreControl.score += 30; } if (coll.gameObject.tag == "Player") { Instantiate(Explosion, new Vector3(transform.position.x, transform.position.y, transform.position.z), Quaternion.identity); Destroy(this.gameObject); } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

全部書くと

C#

1float enemyAttackInterval; 2 3void Start() 4{ 5 // enemyAttackIntervalを初期化、5~10の数値が入る 6 enemyAttackInterval = Random.Range(5.0f, 10.0f); 7} 8 9void Update() 10 { 11 12 transform.Translate(0, 0, -1 * Z_Speed); 13 //以下、攻撃用コード 14 Quaternion quat = Quaternion.Euler(0, 180, 0); 15 intervalTime += Time.deltaTime; 16 if (intervalTime >= enemyAttackInterval) 17 { 18 intervalTime = 0.0f; 19 enemyAttackInterval = Random.Range(5.0f, 10.0f); 20 Instantiate(EnemyBullet, new Vector3(transform.position.x, transform.position.y, transform.position.z), quat); 21 } 22 23 }

かな

投稿2017/09/13 14:00

mtdsnsk

総合スコア789

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ark-T

2017/09/17 00:01

ありがとうございます。うまくできました。
guest

0

こんな感じです

C#

1// 敵が攻撃する間隔 2float enemyAttackInterval; 3// 経過時間 4float enemyAttackTimer; 5 6// Start()の中に書く 7// enemyAttackIntervalを初期化、5~10の数値が入る 8enemyAttackInterval = Random.Range(5.0f, 10.0f); 9 10// Update()の中に書く 11// 経過時間を足していく 12enemyAttackTimer += Time.deltaTime; 13// 経過時間がenemyAttackIntervalを上回った 14if(enemyAttackTimer > enemyAttackInterval) 15{ 16 // 攻撃する処理 17 enemyAttackTimer = 0; // タイマーを戻す 18 enemyAttackInterval = Random.Range(5.0f, 10.0f); // インターバルをセットしなおす 19} 20

C#

1enemyAttackTimer += Time.deltaTime;

これで、Unity内の時間経過が取得できます

投稿2017/09/13 11:32

mtdsnsk

総合スコア789

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ark-T

2017/09/13 12:15

回答ありがとうございます。すみませんが、今使っている攻撃用のコードが教えてくださった方法には使えないみたいです。 質問を攻撃用のコードを追加するよう修正しますので回答いただけると幸いです。
mtdsnsk

2017/09/13 13:48

intervalTimeが0.2で固定されているので、0.2秒ごとに敵が攻撃するのだと思いますが、この間隔が0.5だったり1.2だったりすればいいわけですよね? なので、0.2をランダムにすればよいだけだと思うので、先ほどのRandom.Rangeを使えませんか?
mtdsnsk

2017/09/13 13:51

あと、攻撃のコードは Instantiate(EnemyBullet, new Vector3(transform.position.x, transform.position.y, transform.position.z), quat); この一行だけですよ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問