こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

unity スクリプト 意味

// Patrol.cs
using UnityEngine;
using System.Collections;


public class Patrol : MonoBehaviour {

public Transform[] points;
private int destPoint = 0;
private NavMeshAgent agent;


void Start () {
agent = GetComponent<NavMeshAgent>();

// Disabling auto-braking allows for continuous movement
// between points (ie, the agent doesn't slow down as it
// approaches a destination point).
agent.autoBraking = false;

GotoNextPoint();
}


void GotoNextPoint() {
// Returns if no points have been set up
if (points.Length == 0)
return;

// Set the agent to go to the currently selected destination.
agent.destination = points[destPoint].position;

// Choose the next point in the array as the destination,
// cycling to the start if necessary.
destPoint = (destPoint + 1) % points.Length;
}


void Update () {
// Choose the next destination point when the agent gets
// close to the current one.
if (agent.remainingDistance < 0.5f)
GotoNextPoint();
}
}


~~~~~~~~~~~~~~~~~~~~~~~~~~

// Choose the next point in the array as the destination,
// cycling to the start if necessary.
destPoint = (destPoint + 1) % points.Length;

の意味がよく分かりません。説明して貰えませんか?

このチュートリアル(http://docs.unity3d.com/jp/current/Manual/nav-AgentPatrol.html)です。

投稿日時 - 2016-08-19 14:58:59

QNo.9217303

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

チュートリアルみてないけどおそらくdestPointはpointsというTransFormの配列のインデックスとして使うのだろう。

で、pointsを順番に使うためにインクリメントしている(destPoint + 1)のだが、ずっとインクリメントし続けるとpointsの範囲を超えてしまうので超えたらまた0から(% points.Length)カウントアップさせているのだろう。

~~~~
double[] arraydouble = new double[10];
int index = 0;
while(true)
{
  index = (index + 1) % arraydouble.Length;
  AnyCalc(arraydouble[index]);
}
~~~~

構造としてはこのようなものと同等になるだろう。配列の大きさで次のインデックスを計算している理由は任意の大きさの配列に対応するためだと思われる。

投稿日時 - 2016-08-22 09:21:22

あなたにオススメの質問