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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

C#

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

Unity

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

Q&A

解決済

1回答

582閲覧

乱数による敵の動きの制御がうまくできません

N.hajik

総合スコア4

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

C#

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

Unity

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

0グッド

0クリップ

投稿2023/02/19 10:56

実現したいこと

敵を1秒ごとに向きを変えて動かし続けたい

前提

Unity2Dでシューティングゲームをっ作っています
敵をランダムに動かしたいのですが動きません
敵のオブジェクトにはRigidBody2DとBoxCollider2Dを付けています
それぞれの設定は以下の通りです
イメージ説明

発生している問題・エラーメッセージ

これを付けたスプリクトが一切動かない

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class enemy2 : MonoBehaviour 6{ 7 private Rigidbody2D myRigidBody; 8 public float enemySpeed; 9 private float movePattern; 10 private float moveChangeSpeed = 100; 11 private float moveCT = 0; 12 // Start is called before the first frame update 13 void Start() 14 { 15 myRigidBody = this.gameObject.GetComponent<Rigidbody2D>(); 16 StartCoroutine(loop()); 17 } 18 private IEnumerator loop() { 19 while (true) 20 { 21 yield return new WaitForSeconds(1f); 22 onTimer(); 23 } 24 } 25 private void onTimer() 26 { 27 int movePattern = Random.Range(1, 9); 28 Debug.Log(movePattern); 29 } 30 void FixedUpdate() 31 { 32 Vector2 force = Vector2.zero; 33 if(movePattern == 1) 34 { 35 force = new Vector2(0,enemySpeed); 36 } 37 if(movePattern == 2) 38 { 39 force = new Vector2(0,enemySpeed*-1); 40 } 41 if(movePattern == 3) 42 { 43 force = new Vector2(enemySpeed,0); 44 } 45 if(movePattern == 4) 46 { 47 force = new Vector2(enemySpeed*-1,0); 48 } 49 if(movePattern == 5) 50 { 51 force = new Vector2(enemySpeed,enemySpeed); 52 } 53 if(movePattern == 6) 54 { 55 force = new Vector2(enemySpeed*-1,enemySpeed); 56 } 57 if(movePattern == 7) 58 { 59 force = new Vector2(enemySpeed,enemySpeed*-1); 60 } 61 if(movePattern == 8) 62 { 63 force = new Vector2(enemySpeed*-1,enemySpeed*-1); 64 } 65 myRigidBody.MovePosition(myRigidBody.position + force * Time.fixedDeltaTime); 66 } 67}

試したこと

一秒ごとでなくUpdateごとでやったときはできました

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

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

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

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

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

guest

回答1

0

ベストアンサー

C#

1 private void onTimer() 2 { 3 int movePattern = Random.Range(1, 9); 4 Debug.Log(movePattern); 5 }

上記でmovePatternを再定義しています。
なので、クラスのほうのmovePatternには全く反映されません。

以下のようにする必要があります。

C#

1 private void onTimer() 2 { 3 movePattern = Random.Range(1, 9); 4 Debug.Log(movePattern); 5 }

投稿2023/02/19 11:41

fiveHundred

総合スコア9805

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

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

N.hajik

2023/02/19 11:50

解決しました。ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問