在范围内有一个简单的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");
}
答案 0 :(得分:1)
它持续旋转的原因是因为您在Update()中不断调用randomMovement()
,它会使用Rotate()
不断向您的对象应用旋转。这听起来像你正在尝试做的是让对象每隔几秒钟漫无目的地游荡。你可以通过在randomMovement()上实现计时器来做到这一点,这样每隔几秒就会产生一个新的旋转(类似于你在onCollision中的旋转)。示例如下。
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);
}
}