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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Unity

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

Q&A

1回答

3545閲覧

NPCのランダム移動(2D)

marine08

総合スコア14

Unity

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

0グッド

0クリップ

投稿2020/08/16 08:25

現在unity2Dでゲームを作成しています。
NPCが指定した範囲を上下左右にランダム移動するスクリプトを書きましたが、移動が不安定です。
再生ボタンを押すと、上下移動だけしたり、また瞬間移動をしたりしてしまいます。
原因がわかりません。
アドバイスをいただけると嬉しいです。

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Oiran : MonoBehaviour { private float chargeTime = 5.0f; private float timeCount; Vector3 direction; //進行方向 Vector2 minMoveArea = new Vector2(-2.9f, -1f); Vector2 maxMoveArea = new Vector2(2.9f, 1f); private void Start() { //最初の進行方向をランダム direction = RandomDirection(); } private void Update() { if ((transform.position.x < minMoveArea.x) || (transform.position.y < minMoveArea.y) || (transform.position.x < maxMoveArea.x) || (transform.position.y > maxMoveArea.y) ) { Turn(); } timeCount += Time.deltaTime; transform.position += direction * Time.deltaTime; //指定した時間を経過すると if (timeCount > chargeTime) { //進路をランダムに変更する direction = RandomDirection(); //TimeCountを0に戻す timeCount = 0; } } void Turn() { //タイムカウントを0に戻す。 timeCount = 0; if (direction == Vector3.up) { transform.position = new Vector3(transform.position.x, maxMoveArea.y,transform.position.z); direction = Vector3.down; } else if (direction == Vector3.down) { transform.position = new Vector3(transform.position.x, minMoveArea.y, transform.position.z); direction = Vector3.up; } else if (direction == Vector3.left) { transform.position = new Vector3(minMoveArea.x, transform.position.y, transform.position.z); direction = Vector3.right; } else if (direction == Vector3.right) { transform.position = new Vector3(maxMoveArea.x, transform.position.y, transform.position.z); direction = Vector3.left; } } Vector3 RandomDirection() { int r = Random.Range(0, 4); //0-3までのランダムな数字(変数) switch (r) { default:   //それ以外がdefault case 0: return Vector3.up; case 1: return Vector3.down; case 2: return Vector3.left; case 3: return Vector3.right; } } }

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

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

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

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

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

guest

回答1

0

Update()内の最初のifの、transform.position.x < maxMoveArea.xは不等号が逆な気がします。

投稿2020/08/16 11:26

Yukirr4_

総合スコア728

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

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

marine08

2020/08/21 22:09

そうでした・・・!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問