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

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

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

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

Q&A

解決済

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

ark-T
THEARK

総合スコア16

C#

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

2回答

0グッド

1クリップ

8584閲覧

投稿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); } } }

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答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

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

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); この一行だけですよ

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。