1
範囲内にいるときにプレイヤーを追いかけると、プレイヤーの範囲にないときにAIをランダムに動かします。 AIが壁に当たってプレイヤーの範囲から外れると、AIは常にスピンし始めます。それがなぜそうし続けるのかうまくいかない。衝突が発生したとき、Aiはいつも回転します
私は単純なことを逃しているかもしれません... 何か助けてくれてありがとう。あなたが継続的に継続的にRotate()
を使用してオブジェクトに回転を適用し、あなたの更新()でrandomMovement()
を呼び出しているので、それが継続的に回転している
void Update()
{
Target = GameObject.FindGameObjectWithTag("Player");
if (Vector3.Distance(Target.transform.position, transform.position) < 25)
{
followPlayer();
}
else
{
randomMovement();
}
}
public void followPlayer()
{
if (Vector3.Distance(transform.position, Target.transform.position) >= MinDist)
{
transform.position += transform.forward * MoveSpeed * Time.deltaTime;
transform.LookAt(Target.transform);
if (Vector3.Distance(transform.position, Target.transform.position) <= MaxDist)
{
}
}
else
{
}
}
public void randomMovement()
{
transform.position += transform.forward * MoveSpeed * Time.deltaTime;
transform.Rotate(RandomDirection * Time.deltaTime * 10.0f);
}
void OnCollisionEnter(Collision col)
{
bool hasTurned = false;
if (col.transform.gameObject.name != "Terrain")
{
if(hasTurned == false)
{
RandomDirection = new Vector3(0, Mathf.Sin(TimeBetween) * (RotationRange/2) + OriginalDirection, 0);
randomMovement();
hasTurned = true;
}
else
{
randomMovement();
hasTurned = false;
}
Debug.Log("Hit");
}
AIエンティティにリジッドボディが取り付けられていますか?おそらく、衝突後にスピンを引き起こしているでしょう。その場合は、回転をフリーズしてみてください。次をご覧ください:https://docs.unity3d.com/ScriptReference/Rigidbody-freezeRotation.htmlそれは回転しているように見えますが、壁に衝突し続ける原因となる可能性があります。ランダムな回転と障害物から離れて "インテリジェントな"方法を持って移動する代わりに –
はい、私は問題の原因となる可能性があります!ありがとう@TobiasTheel – Robertgold
これが実際に原因であることを確認できれば、私はその答えを作成します:) –