Skip to content

Instantly share code, notes, and snippets.

@rakibj
Created May 29, 2022 13:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rakibj/859d97cd078fb61dcc1d1d63f94fef59 to your computer and use it in GitHub Desktop.
Save rakibj/859d97cd078fb61dcc1d1d63f94fef59 to your computer and use it in GitHub Desktop.
Swerve input for hypercasual runner games
using System;
using UnityEngine;
namespace RakibJahan
{
public class SwerveMovement: MonoBehaviour
{
[SerializeField] private float maxDisplacement = 0.2f;
[SerializeField] private float maxPositionX = 2f;
private Vector2 _anchorPosition;
private void Update()
{
var inputX = GetInput();
var displacementX = GetDisplacement(inputX);
displacementX = SmoothOutDisplacement(displacementX);
var newPosition = GetNewLocalPosition(displacementX);
newPosition = GetLimitedLocalPosition(newPosition);
transform.localPosition = newPosition;
}
private Vector3 GetLimitedLocalPosition(Vector3 position)
{
position.x = Mathf.Clamp(position.x, -maxPositionX, maxPositionX);
return position;
}
private Vector3 GetNewLocalPosition(float displacementX)
{
var lastPosition = transform.localPosition;
var newPositionX = lastPosition.x + displacementX;
var newPosition = new Vector3(newPositionX, lastPosition.y, lastPosition.z);
return newPosition;
}
private float GetInput()
{
var inputX = 0f;
if (Input.GetMouseButtonDown(0))
{
_anchorPosition = Input.mousePosition;
}
else if (Input.GetMouseButton(0))
{
inputX = (Input.mousePosition.x - _anchorPosition.x);
_anchorPosition = Input.mousePosition;
}
return inputX;
}
private float GetDisplacement(float inputX)
{
var displacementX = 0f;
displacementX = inputX * Time.deltaTime;
return displacementX;
}
private float SmoothOutDisplacement(float displacementX)
{
return Mathf.Clamp(displacementX, -maxDisplacement, maxDisplacement);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment