private float movementSpeed = 2f;
public Rect limits = new Rect(0,0,20,20);
Vector2 newPosV2 = new Vector2();
Vector3 newPosV3 = new Vector3();
void Update1()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
newPosV3 = transform.position - new Vector3(horizontalInput * movementSpeed * Time.deltaTime, 0,
verticalInput * movementSpeed * Time.deltaTime);
newPosV2.Set(newPosV3.x, newPosV3.z);
if (limits.Contains(newPosV2)) transform.position = newPosV3;
}
using UnityEngine;
public class MoveTowardsCursorCoroutine : MonoBehaviour
{
public float speed = 5f;
public float targetDistance = 1f;
private Coroutine moveCoroutine;
IEnumerator MoveToTarget(Vector3 target)
{
while (true)
{
Vector3 direction = (target - transform.position).normalized;
float distance = Vector3.Distance(transform.position, target);
// Если достигли цели, начинаем двигаться по инерции
if (distance <= targetDistance)
{
// Задаем новую цель немного впереди текущей позиции
target = transform.position + direction * 10f; // Примерная дистанция инерции
}
// Плавное перемещение
transform.position += direction * speed * Time.deltaTime;
yield return null;
}
}
void Update()
{
// Получаем позицию курсора в мировых координатах
Vector3 mousePosition = Input.mousePosition;
mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
mousePosition.z = transform.position.z;
// Если корутина не запущена, запускаем новую
if (moveCoroutine == null)
{
moveCoroutine = StartCoroutine(MoveToTarget(mousePosition));
}
}
}