Как сделать тряску курсора мыши в Unity?

Для создания тряски курсора мыши в Unity используется класс Cursor и его метод SetCursor. Этот метод позволяет установить пользовательский курсор в игре. Чтобы сделать тряску, нам нужно изменить положение курсора в случайных направлениях с определенной частотой.

Вот пример кода на C#, который реализует тряску курсора мыши в Unity:

using UnityEngine;

public class MouseShake : MonoBehaviour
{
    public float shakeFrequency = 10f;
    public float shakeAmount = 10f;

    private float shakeTimer;
    private Vector3 originalCursorPosition;

    private void Start()
    {
        originalCursorPosition = Input.mousePosition;
    }

    private void Update()
    {
        if (shakeTimer > 0)
        {
            shakeTimer -= Time.deltaTime;

            float offsetX = Random.Range(-shakeAmount, shakeAmount);
            float offsetY = Random.Range(-shakeAmount, shakeAmount);

            Vector3 cursorPosition = originalCursorPosition + new Vector3(offsetX, offsetY, 0f);

            Cursor.visible = true;
            Cursor.SetCursor(null, cursorPosition, CursorMode.Auto);
        }
        else
        {
            Cursor.visible = false;
        }
    }

    public void ShakeMouse()
    {
        shakeTimer = shakeFrequency;
    }
}

Объяснение кода:

1. Мы создаем публичные переменные shakeFrequency и shakeAmount, чтобы можно было настроить частоту и силу тряски в редакторе Unity.
2. В Start методе мы сохраняем исходное положение курсора мыши.
3. В Update методе мы проверяем, если shakeTimer больше 0, то мы выполняем тряску курсора.
4. Внутри условия тряски мы генерируем случайные значения для смещения курсора в диапазоне от -shakeAmount до shakeAmount.
5. Затем мы создаем новый Vector3 смещение на основе сгенерированных значений.
6. Мы устанавливаем новое положение курсора, используя Cursor.SetCursor, где первый параметр - это текстура курсора (в данном случае мы не используем текстуру, поэтому передаем null), второй параметр - новое положение курсора в пикселях и третий параметр - режим курсора.
7. Если shakeTimer меньше или равен 0, то мы делаем курсор невидимым, чтобы он не отображался после окончания тряски.
8. Мы также объявляем публичный метод ShakeMouse, который будет вызываться в другом месте для запуска тряски. Этот метод устанавливает shakeTimer значение shakeFrequency, чтобы начать тряску в следующем кадре.

Чтобы использовать этот код, надо прикрепить скрипт к объекту в сцене Unity. Затем вы можете вызвать метод ShakeMouse событием или из другого скрипта для запуска тряски курсора мыши в ваших игровых событиях или условиях.