Начал ИД вроде
This commit is contained in:
1 parent
cd56b1969c
commit
f557c58c9d
35 files changed
+683
-1484
No files matched your search
@@ -0,0 +1,98 @@
|
||||
using System.Collections.Generic;
|
||||
using Code.Example.Race.Racer.AI.ID;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Code.Example.Race.Racer.AI
|
||||
{
|
||||
public class AIRacerID : Racer
|
||||
{
|
||||
public override void SetData(RacerData data)
|
||||
{
|
||||
Data = data;
|
||||
|
||||
_velocity = Vector3.zero;
|
||||
_steering = new Steering();
|
||||
}
|
||||
|
||||
public override void Initialize(List<Transform> waypoints)
|
||||
{
|
||||
Waypoints = waypoints;
|
||||
}
|
||||
|
||||
public override void NextWaypoint()
|
||||
{
|
||||
if(CurrentWaypointIndex >= Waypoints.Count) CurrentWaypointIndex = 0;
|
||||
|
||||
CurrentWaypointIndex++;
|
||||
}
|
||||
|
||||
public override void StartRacer()
|
||||
{
|
||||
_running = true;
|
||||
}
|
||||
|
||||
public override void StopRacer()
|
||||
{
|
||||
_running = false;
|
||||
}
|
||||
|
||||
[SerializeField] private AgentBehaviour agent;
|
||||
|
||||
private float _orientation;
|
||||
private float _rotation;
|
||||
private Vector3 _velocity;
|
||||
private Steering _steering;
|
||||
private bool _running;
|
||||
|
||||
private float NormalizeAngle(float angle)
|
||||
{
|
||||
switch (angle)
|
||||
{
|
||||
case > 360.0f:
|
||||
{
|
||||
while (angle > 360.0f) angle -= 360.0f;
|
||||
break;
|
||||
}
|
||||
case < 0.0f:
|
||||
{
|
||||
while (angle < 0.0f) angle += 360.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return angle;
|
||||
}
|
||||
public virtual void Update()
|
||||
{
|
||||
if (!_running) return;
|
||||
|
||||
var displacement = _velocity * Time.deltaTime;
|
||||
_orientation += _rotation * Time.deltaTime;
|
||||
_orientation = NormalizeAngle(_orientation);
|
||||
|
||||
transform.Translate(displacement, Space.World);
|
||||
transform.Rotate(Vector3.up, _orientation);
|
||||
}
|
||||
public virtual void LateUpdate()
|
||||
{
|
||||
if (!_running) return;
|
||||
|
||||
_steering = agent.GetSteering(Waypoints[CurrentWaypointIndex]);
|
||||
|
||||
_velocity += _steering.linear * Time.deltaTime;
|
||||
_rotation += _steering.angular * Time.deltaTime;
|
||||
if (_velocity.magnitude > Data.speed)
|
||||
{
|
||||
_velocity = _velocity.normalized * Data.speed;
|
||||
}
|
||||
if (_steering.angular == 0.0f)
|
||||
{
|
||||
_rotation = 0.0f;
|
||||
}
|
||||
if (_steering.linear.sqrMagnitude == 0.0f)
|
||||
{
|
||||
_velocity = Vector3.zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user