Sprite flips depending on movement direction
This commit is contained in:
@@ -23,6 +23,7 @@ namespace Input
|
||||
// Note: String-based property lookup is flagged as inefficient, but is common in Unity for dynamic children.
|
||||
private Animator animator;
|
||||
private Transform artTransform;
|
||||
private SpriteRenderer spriteRenderer;
|
||||
|
||||
// --- MoveToAndNotify State ---
|
||||
public delegate void ArrivedAtTargetHandler();
|
||||
@@ -39,6 +40,11 @@ namespace Input
|
||||
animator = artTransform.GetComponent<Animator>();
|
||||
else
|
||||
animator = GetComponentInChildren<Animator>();
|
||||
// Cache SpriteRenderer for flipping
|
||||
if (artTransform != null)
|
||||
spriteRenderer = artTransform.GetComponent<SpriteRenderer>();
|
||||
if (spriteRenderer == null)
|
||||
spriteRenderer = GetComponentInChildren<SpriteRenderer>();
|
||||
}
|
||||
|
||||
void Start()
|
||||
@@ -169,16 +175,30 @@ namespace Input
|
||||
if (animator != null && aiPath != null)
|
||||
{
|
||||
float normalizedSpeed = 0f;
|
||||
Vector3 velocity = Vector3.zero;
|
||||
if (isHolding && GameManager.Instance.DefaultHoldMovementMode == GameSettings.HoldMovementMode.Direct)
|
||||
{
|
||||
normalizedSpeed = directMoveVelocity.magnitude / aiPath.maxSpeed;
|
||||
velocity = directMoveVelocity;
|
||||
}
|
||||
else if (aiPath.enabled)
|
||||
{
|
||||
normalizedSpeed = aiPath.velocity.magnitude / aiPath.maxSpeed;
|
||||
velocity = aiPath.velocity;
|
||||
}
|
||||
|
||||
animator.SetFloat("Speed", Mathf.Clamp01(normalizedSpeed));
|
||||
SetSpriteFlip(velocity);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetSpriteFlip(Vector3 velocity)
|
||||
{
|
||||
if (spriteRenderer != null && velocity.sqrMagnitude > 0.001f)
|
||||
{
|
||||
if (velocity.x > 0.01f)
|
||||
spriteRenderer.flipX = false;
|
||||
else if (velocity.x < -0.01f)
|
||||
spriteRenderer.flipX = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user