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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

1306閲覧

unity2d 角度をランダムに決めランダムな移動をする。

Um_kok

総合スコア39

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/04/20 06:56

編集2021/04/21 09:45

ランダムに回転して移動します。それを繰り返す。

敵についているコード

C#

1public class Enemy_Move : RandomMove 2{ 3 [SerializeField] Enemy_Status enemy; // ステータス 4 [SerializeField] Enemy_Collision enemyColl; // 探索範囲 5 6 Transform my_Vec; // 自身の座標 7 Quaternion direction; // 向き 8 float timeCount; // 時間を計測 9 float maxTime = 1f; // 時間 10 11 12 private void Start() 13 { 14 my_Vec = transform; 15 my_Vec.rotation = direction; 16 } 17 void Update() 18 { 19 if (enemyColl.follow) {// 追従する 20 21 //my_Vec.position += (enemyColl.playerPos - transform.position) * enemy.enemy_Speed; 22 //transform.position += my_Vec.position * Time.deltaTime; 23 } 24 else { 25 26 base.RandomMoveOn(); 27 28 29 timeCount += Time.deltaTime; 30 if (timeCount >= maxTime) {// 指定時間後、向きを変える 31 32 StartCoroutine(base.RandomRot()); 33 timeCount = 0; 34 } 35 36 } 37 } 38} 39

RandomMove

C#

1public class RandomMove : MonoBehaviour 2{ 3 /// <summary> 4 /// ランダムな角度 5 /// </summary> 6 /// <returns></returns> 7 public virtual IEnumerator RandomRot() { 8 9 Quaternion trans = transform.rotation; ; 10 float random_Z = Random.Range(180f, -180f); 11 trans.z = Mathf.LerpAngle(transform.localRotation.z, random_Z, 1f); 12 13 trans = Quaternion.Euler(0, 0, random_Z); 14 this.gameObject.transform.rotation = trans; 15 16 yield break; 17 } 18 /// <summary> 19 /// ランダムに移動 20 /// </summary> 21 public virtual void RandomMoveOn() { 22 23 float speed;// 移動スピード 24 float speed_Max = 4f; 25 Transform myTransform = this.transform; 26 27 speed = Random.Range(0, speed_Max); 28 myTransform.Translate(0, speed * Time.deltaTime, 0); 29 } 30} 31 32スクリプタブルオブジェクトを使ってみたかったので使っています。 33 34```C# 35[CreateAssetMenu(fileName = "Enemy", menuName = "ScriptableObjects/CreateAsset")] 36public class Enemy_Status : ScriptableObject 37{ 38 public float enemy_Speed = 0.1f;// スピード 39}

下手ながらも
回転をやりました。回転をゆっくりしたいです。

ーーーーーーーーーー追記ーーーーーーーーーーーーーーー
実装したいのは敵のAIです。
・範囲内に敵が入っているのならば追従(追従は後でやります。)
・入っていないならばランダムに角度を変え移動

敵のAIには二つコライダがついていて、一つはプレイヤーの弾を受け止める方(小さいコライダ)
イメージ説明
敵の子である二つ目は敵の探索範囲(大きいコライダ)
イメージ説明
現在下手ながらもコードを書いたのですが、挙動を直したいです。
・回転の角度変更をゆっくりにする(今の状態だとかくかくしている)。
やり方のヒントでも良いので教えてもらえないでしょうか?こんな感じみたいなコードを貰えると嬉しいです。

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

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

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

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

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

ayousanz

2021/04/20 11:26

Scriptだけではさすがにどのような動きになっているのかがわからないのでGIFを載せていただけばと思います
Um_kok

2021/04/21 00:07

返信遅れてすみません。GIFを作るツールが無いので写真を貼ります。
ayousanz

2021/04/21 14:05

長くなりそうなので,回答のほうで続きを書きます
guest

回答1

0

ベストアンサー

関係ない部分もありますが,数点お聞きしたいです.(アドバイス等も入っています)

  1. RandomRot()にコールチンを使っている理由.私の理解不足かもしれませんが,ここは特に非同期処理などとかではないため,コールチンを使う意味がないように思えます.

  2. 敵のステータス管理に ScriptableObjectを使用するのはいいと思います.しかし,使用するのあれば,回転速度だけではなく移動速度も含めるといいと思います

  3. 実際にどのくらいの回転速度なのかわからないので,ゆっくりにするのが具体的にどのくらいにしたいのかがはっきりとわかりませんが以下のどれかを使用すればできると思います.

  • DOTweenを使って回転のアニメーションを作成する
  • 単純に回転速度を遅くする(パット見た感じこちらでできそうな気もします)

投稿2021/04/21 14:10

ayousanz

総合スコア258

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

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

Um_kok

2021/04/22 02:17

承知しました。言われた通りやってみたところ出来ました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問