Как осуществить движение змейки за курсором мыши в Unity 3D?

хочу осуществить передвижение змейки за курсором мыши в 3d, но голова змейки постоянно движется к камере. Компонент который должен осуществлять поворот головы змейки.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SnakeInput : MonoBehaviour
{
    private Camera _camera;
    

    private void Start()
    {
        _camera = Camera.main;
    }
   
    public Vector3 GetDirectionToClick1(Vector3 headPosition)
    {
        Vector3 mousePosition = Input.mousePosition;
        mousePosition = _camera.ScreenToViewportPoint(mousePosition);
        mousePosition.y = 1;
        mousePosition = _camera.ViewportToWorldPoint(mousePosition);
        Vector3 dir = new Vector3(mousePosition.x - headPosition.x, mousePosition.y - headPosition.y, mousePosition.z - headPosition.z);
       
        return dir;

    }  
}

Компонент отвечающий за движение змейки

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(TailGenerator))]
[RequireComponent(typeof(SnakeInput))]
public class Snake : MonoBehaviour
{
    [SerializeField] private float _speed;
    [SerializeField] private float _tailSpringness;
    [SerializeField] private SnakeHead _head;

    private SnakeInput _input;
    private List<Segment> _tail;
    private TailGenerator _tailGenerator;

    private void Awake()
    {
        _tailGenerator = GetComponent<TailGenerator>();
        _input = GetComponent<SnakeInput>();
        _tail = _tailGenerator.Generate();
    }

    private void FixedUpdate()
    {
        Move(_head.transform.position + _head.transform.right * _speed * Time.fixedDeltaTime );

       _head.transform.right = _input.GetDirectionToClick1(_head.transform.position);//_input.GetDirectionToClick(_head.transform.position);


    }

    private void Move(Vector3 nextPosition )
    {
        Vector3 previousPosition = _head.transform.position;

        foreach(var segment in _tail)
        {
            Vector3 tempPosition = segment.transform.position;
            segment.transform.position = Vector3.Lerp(segment.transform.position, previousPosition, _tailSpringness * Time.deltaTime);
            previousPosition = tempPosition;
        }
        _head.Move(nextPosition);
    }
}

Ответы (0 шт):