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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

2回答

616閲覧

int型のリスト番号に沿って目的地を巡回させたい。

MIRIS88

総合スコア3

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/07/14 10:06

前提・実現したいこと

現在Unityゲーム開発をしている者です。
ランダムに番号を配列させたint型可変長リストを作成しました。
たとえば、[4, 2, 3, 5, 4, 1, 5]って感じです。
それを基に、Navmeshエージェントが地点オブジェクトを格納した配列から対応した番号を選んで、巡回させたいです。

該当のソースコード

private List<int> plan = new List<int>();
//ここでは、このグローバル変数に1から5までの番号をもった可変長リストを作成します。
int Point;
//目的地番号
public Transform[] movePoints;
// 巡回地点オブジェクトを格納する配列//5つの地点をunityのInspectorから入れます。

private void GotoNextPoint()
{
if (movePoints.Length == 0)
{
return;
}
for (int i = 0; i < plan.Count; i++)
{
Point = plan[i];
myAgent.destination = movePoints[Point - 1].position;
//movePointsは要素数は0から4なので、(Point-1)にしています。
}

}

void Start()
{
GotoNextPoint();
}

試したこと

ゲームを再生すると、リストのplanの最後の要素しか目的地を獲得せずに巡回しません。。。。。

補足情報(FW/ツールのバージョンなど)

UnityHub ver2020.3.12.f1

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

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

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

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

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

guest

回答2

0

for (int i = 0; i < plan.Count; i++)
{
Point = plan[i];
myAgent.destination = movePoints[Point - 1].position;
//movePointsは要素数は0から4なので、(Point-1)にしています。
}

ここって,plan.Count回だけ myAgent.destination を書き換えているわけで,
それは結果として,

Point = plan[ plan.Count-1 ]; myAgent.destination = movePoints[Point - 1].position;

って書いたのと一緒なんじゃないですかね.

投稿2021/07/14 10:13

fana

総合スコア11708

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

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

MIRIS88

2021/07/14 10:18

そうですよね。ありがとうございます。
guest

0

ベストアンサー

c#

1for (int i = 0; i < plan.Count; i++) 2{ 3 Point = plan[i]; 4 myAgent.destination = movePoints[Point - 1].position; 5 //movePointsは要素数は0から4なので、(Point-1)にしています。 6}

この記述だと、planの最後の要素plan[plan.Count-1]しか取得しないのは当たり前のように見えます。

nowPlanNumなどの変数を作成して、planが1つ以上あればまずはnowPlanNum = 0から開始。movePoints[nowPlanNum]にたどり着いたらnowPlanNum=1にする。
それをplan.Countになるまで継続。

というような形にすれば良いのではないでしょうか

投稿2021/07/14 10:12

k4a

総合スコア983

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

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

MIRIS88

2021/07/14 10:17

コメントありがとうございます。 お手数ですが、スクリプトを提示していただけたら幸いです。
k4a

2021/07/14 10:22 編集

`myAgent`その他諸々の仕様を知らないですし、そこを作れとなると質問ではなく依頼になってしまうので、申し訳ないですがお受けできません。
MIRIS88

2021/07/14 10:23

ありがとうございます。解決できました。
k4a

2021/07/14 10:26

良かったです。では、別回答を作成しても良いので解決済みにしておいてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問