C# 当碰撞发生时,Ai会一直旋转

C# 当碰撞发生时,Ai会一直旋转,c#,unity3d,vector,artificial-intelligence,collision-detection,C#,Unity3d,Vector,Artificial Intelligence,Collision Detection,有一个简单的AI,它在玩家范围内跟随玩家,在不在玩家范围内时随机移动AI。当AI撞到墙上并且超出玩家的射程时,它开始一直旋转。不明白为什么它一直这么做 我可能错过了一件简单的事情。。。 非常感谢你的帮助 void Update() { Target = GameObject.FindGameObjectWithTag("Player"); if (Vector3.Distance(Target.transform.position, transform.position) &l

有一个简单的AI,它在玩家范围内跟随玩家,在不在玩家范围内时随机移动AI。当AI撞到墙上并且超出玩家的射程时,它开始一直旋转。不明白为什么它一直这么做

我可能错过了一件简单的事情。。。 非常感谢你的帮助

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");
    }
void Update()
{
Target=GameObject.FindGameObjectWithTag(“玩家”);
if(矢量3.距离(Target.transform.position,transform.position)<25)
{
followPlayer();
}
其他的
{
随机运动();
}
}
public void followPlayer()
{
if(向量3.距离(transform.position,Target.transform.position)>=Minist)
{
transform.position+=transform.forward*MoveSpeed*Time.deltaTime;
transform.LookAt(Target.transform);

if(Vector3.Distance(transform.position,Target.transform.position)它持续旋转的原因是因为您在更新()中不断调用
randomMovement()
,该更新()使用
Rotate()对对象持续应用旋转
。听起来你想做的是每隔几秒钟让对象无目的地漫游一次。你可以通过在你的randomMovement()上实现定时器来做到这一点,这样每隔几秒钟,它就会生成一个新的旋转(类似于你在图中看到的)。下面的示例

float t = 0;
public void randomMovement()
{
    transform.position += transform.forward * MoveSpeed * Time.deltaTime;

    t += Time.deltaTime;
    if (t > 3f) // set to a new rotation every 3 seconds.
    {
        t = 0; // reset timer
        RandomDirection = new Vector3(0, Random.Range(0f, 360f), 0); // turn towards random direction

        transform.Rotate(RandomDirection);
    }
}

你的AI实体上有一个刚体吗?这可能是碰撞后旋转的原因。如果是这样,试着冻结旋转。看一看:也有可能,它看起来像是旋转的,因为它一直与墙发生碰撞,因为你选择了一个非常随机的旋转,让它移动,而不是有一个旋转“聪明”的方式来摆脱障碍物我做,这可能是问题的原因!谢谢@Tobiasheeli如果你能确认,这确实是原因,我将为此创建一个答案:)不幸的是,没有,仍然旋转…在再次检查之前必须想一个聪明的方式来移动玩家。@Tobiasheela相当“愚蠢”“解决方案可能是让人工智能在协作时直接进入oposite方向。因为您似乎不使用寻路,所以这可能是一个临时的解决方案。