ID3/Assets/Wander.cs
2026-03-20 00:22:54 +03:00

48 lines
1.6 KiB
C#

using UnityEngine;
using System.Collections;
public class Wander : Face
{
public float offset;
public float radius;
public float rate;
public override void Awake()
{
target = new GameObject();
target.transform.position = transform.position;
base.Awake();
}
public override Steering GetSteering()
{
Steering steering = new Steering();
float wanderOrientation = Random.Range(-1.0f, 1.0f) * rate;
float targetOrientation = wanderOrientation + agent.orientation;
// Вычисляем позицию цели для поворота
Vector3 orientationVec = GetOriAsVec(agent.orientation);
Vector3 targetPosition = (offset * orientationVec) + transform.position;
targetPosition = targetPosition + (GetOriAsVec(targetOrientation) * radius);
// Передаем позицию цели в Face для расчета поворота
targetAux.transform.position = targetPosition;
// Получаем только поворот от Face
steering = base.GetSteering();
// Добавляем постоянное движение вперед
steering.linear = agent.maxAccel * GetOriAsVec(agent.orientation);
return steering;
}
public Vector3 GetOriAsVec(float orientation)
{
Vector3 vector = Vector3.zero;
vector.x = Mathf.Sin(orientation * Mathf.Deg2Rad) * 1.0f;
vector.z = Mathf.Cos(orientation * Mathf.Deg2Rad) * 1.0f;
return vector.normalized;
}
}