Как сделать движение змеи четко по клеткам в сетке Grid?
уважаемые программисты! Прошу помочь с ситуацией: У меня есть змея, которая двигается по скрипту:
Rigidbody2D rb;
float WormSpeed = 1;
void Start()
{
// задаем движение вперед
rb = GetComponent<Rigidbody2D>();
rb.velocity = transform.up * WormSpeed;
}
Так же у меня есть скрипт создания туловища:
public Transform WormsHead;
public float WormsDiameter;
public int body;
private List<Transform> WormsBody = new List<Transform>();
private List<Vector2> positions = new List<Vector2>();
void Start()
{
positions.Add(WormsHead.position);
for (int i = 0; i < body; i++)
{
AddBody();
}
}
void Update()
{
float daistance = ((Vector2) WormsHead.position - positions[0]).magnitude;
if (daistance > WormsDiameter)
{
Vector2 direction = ((Vector2)WormsHead.position - positions[0]).normalized;
positions.Insert(0, positions[0] + direction * WormsDiameter);
positions.RemoveAt(positions.Count - 1);
daistance -= WormsDiameter;
}
for (int i = 0; i < WormsBody.Count; i++)
{
WormsBody[i].position = Vector2.Lerp(positions[i + 1], positions[i], daistance / WormsDiameter);
}
}
public void AddBody()
{
Transform body = Instantiate(WormsHead, positions[positions.Count - 1], Quaternion.identity, transform);
WormsBody.Add(body);
positions.Add(body.position);
}
При столкновении с яблоком она поворачивает, вот скрипт поворота:
private void OnTriggerEnter2D(Collider2D other)
{
if(other.CompareTag("aple"))
{
float angle = 360f;
transform.rotation = Quaternion.Euler(0, 0, angle);
rb.velocity = transform.up * WormSpeed;
Destroy(other.gameObject);
}
Как мне осуществить четкое движение змеи по сетке Grid, а так же ровный поворот по сетке при касании с объектом (размер сетки установил X=0,5 Y=0,5? Мне нужно чтоб змея двигалась плавно и четко по клеткам(отмечу что змея двигается сейчас постоянно и плавно, но у нее нет привязки к сетке