Как осуществить движение змейки за курсором мыши в 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);
}
}