-
-
Save rakibj/859d97cd078fb61dcc1d1d63f94fef59 to your computer and use it in GitHub Desktop.
Swerve input for hypercasual runner games
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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