plantilla base para movimiento básico
This commit is contained in:
Robii Aragon
2026-02-05 05:07:55 -08:00
parent 195b696771
commit 779f2c8b20
14443 changed files with 23840465 additions and 452 deletions

View File

@@ -0,0 +1,321 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class spriteAnimatorSystem : MonoBehaviour
{
[Header ("Ability Settings")]
[Space]
public bool spriteAnimatorEnabled = true;
public bool spriteAnimatorActive;
public bool adjustSpriteToRotationToCameraDirection;
public string groundState = "Grounded";
public string movingState = "Moving";
public string airSpeedState = "Air Speed Y";
public string jumpState = "Jump";
public string runState = "Run";
public string cameraAngleState = "Camera Angle";
public string idleAnimatorName = "Idle";
public string walkAnimatorName = "Walk";
public string jumpAnimatorName = "Jump";
public string onAirUpAnimatorName = "On Air Up";
public string onAirDownAnimatorName = "On Air Down";
public string landAnimatorName = "Land";
public float jumpAnimationDuration = 1;
[Space]
[Header ("Debug")]
[Space]
public bool idleActive;
public bool walkActive;
public bool jumpActive;
public bool runActive;
public bool onAirUpActive;
public bool onAirDownActive;
public bool landActive;
public bool playerIsMoving;
public bool idlePreviouslyActive;
public bool walkPreviouslyActive;
public bool jumpPreviouslyActive;
bool animationStateChanged;
public bool playerOnGround;
public bool playerOnGroundPreviously;
public bool playerHasJumped;
public float airSpeed;
public float horizontalInput;
public float verticalInput;
Vector2 axisValues;
public float currentCameraAngle;
public float currentCameraAngleValue;
[Space]
[Header ("Event Settings")]
[Space]
public UnityEvent eventOnSpriteEnabled;
public UnityEvent eventOnSpriteDisabled;
[Space]
[Header ("Components")]
[Space]
public playerController mainPlayerController;
public playerWeaponsManager mainPlayerWeaponsManager;
public playerCamera mainPlayerCamera;
public Transform mainCameraTransform;
public Transform playerControllerTransform;
public Animator mainAnimator;
public Animator mainSpriteAnimator;
public GameObject playerSpriteGameObject;
public Transform playerSpriteTransform;
public Transform movementLastDirection;
Vector3 originalSpriteScale;
bool movingToRightActive;
bool movingToLeftActive;
float lastTimeOnAir;
float lastTimeMoving;
int groundID;
int movingID;
int airSpeedID;
int jumpID;
int runID;
int cameraAngleID;
void Start ()
{
originalSpriteScale = playerSpriteTransform.localScale;
groundID = Animator.StringToHash (groundState);
movingID = Animator.StringToHash (movingState);
airSpeedID = Animator.StringToHash (airSpeedState);
jumpID = Animator.StringToHash (jumpState);
runID = Animator.StringToHash (runState);
cameraAngleID = Animator.StringToHash (cameraAngleState);
}
void Update ()
{
if (spriteAnimatorActive) {
playerOnGround = mainPlayerController.isPlayerOnGround ();
if (mainPlayerController.isPlayerUsingInput ()) {
lastTimeMoving = Time.time;
}
if (Time.time < lastTimeMoving + 0.4f) {
playerIsMoving = true;
} else {
playerIsMoving = false;
}
playerHasJumped = mainPlayerController.jumpInput;
runActive = mainPlayerController.isPlayerRunning ();
airSpeed = mainPlayerController.currentVelocity.y;
if (playerHasJumped != jumpPreviouslyActive) {
if (playerHasJumped) {
jumpPreviouslyActive = true;
jumpActive = true;
lastTimeOnAir = Time.time;
}
}
if (jumpPreviouslyActive) {
if (((playerOnGround || airSpeed < 0) && Time.time > lastTimeOnAir + 0.5f) || (!playerOnGround && Time.time > lastTimeOnAir + jumpAnimationDuration)) {
jumpPreviouslyActive = false;
jumpActive = false;
}
}
axisValues = mainPlayerController.getRawAxisValues ();
Vector3 direction = playerSpriteTransform.position - mainCameraTransform.position;
// float angle = Vector3.SignedAngle (direction, playerSpriteTransform.forward, playerSpriteTransform.up);
Quaternion lookDirection = Quaternion.LookRotation (direction);
float upAxisRotation = lookDirection.eulerAngles.y;
playerSpriteTransform.eulerAngles = playerSpriteTransform.up * upAxisRotation;
if (adjustSpriteToRotationToCameraDirection) {
if (axisValues != Vector2.zero) {
Vector3 moveInput = mainPlayerController.getMoveInputDirection ();
Quaternion movevementDirectionRotation = Quaternion.LookRotation (new Vector3 (moveInput.x, 0, moveInput.z));
movementLastDirection.rotation = Quaternion.Euler (new Vector3 (0, movevementDirectionRotation.eulerAngles.y, 0));
}
currentCameraAngle = Vector3.SignedAngle (mainPlayerCamera.transform.forward, movementLastDirection.forward, mainPlayerCamera.transform.up);
float ABSAngle = Mathf.Abs (currentCameraAngle);
if (ABSAngle < 30) {
currentCameraAngleValue = 0;
} else if (ABSAngle > 30 && ABSAngle < 60) {
currentCameraAngleValue = 1;
} else if (ABSAngle > 60 && ABSAngle < 120) {
currentCameraAngleValue = 2;
} else if (ABSAngle > 120 && ABSAngle < 150) {
currentCameraAngleValue = 2;
} else {
currentCameraAngleValue = 3;
}
// if (currentCameraAngleValue == 1 || currentCameraAngleValue == 2) {
// if (axisValues.x == 0) {
// if (currentCameraAngle > 0) {
// axisValues.x = -1;
// } else if (currentCameraAngle < 0) {
// axisValues.x = 1;
// }
// }
// }
}
if (axisValues.x > 0) {
if (!movingToRightActive) {
playerSpriteTransform.localScale = new Vector3 (axisValues.x * originalSpriteScale.x, originalSpriteScale.y, originalSpriteScale.z);
movingToRightActive = true;
movingToLeftActive = false;
}
} else if (axisValues.x < 0) {
if (!movingToLeftActive) {
playerSpriteTransform.localScale = new Vector3 (axisValues.x * originalSpriteScale.x, originalSpriteScale.y, originalSpriteScale.z);
movingToLeftActive = true;
movingToRightActive = false;
}
}
updateAnimator ();
}
}
void updateAnimator ()
{
mainSpriteAnimator.SetBool (groundID, playerOnGround);
mainSpriteAnimator.SetBool (movingID, playerIsMoving);
mainSpriteAnimator.SetFloat (airSpeedID, airSpeed, 0.1f, Time.fixedDeltaTime);
mainSpriteAnimator.SetBool (jumpID, jumpActive);
mainSpriteAnimator.SetBool (runID, runActive);
mainSpriteAnimator.SetFloat (cameraAngleID, currentCameraAngleValue);
}
public void setSpriteAnimatorActiveState (bool state)
{
if (!spriteAnimatorEnabled) {
return;
}
if (spriteAnimatorActive == state) {
return;
}
spriteAnimatorActive = state;
if (spriteAnimatorActive) {
} else {
}
mainAnimator.enabled = !state;
mainSpriteAnimator.enabled = state;
mainPlayerController.setUseFirstPersonPhysicsInThirdPersonActiveState (state);
mainPlayerController.setCharacterMeshGameObjectState (!state);
mainPlayerController.setCharacterMeshesListToDisableOnEventState (!state);
mainPlayerController.setUseRootMotionActiveState (!state);
mainPlayerWeaponsManager.enableOrDisableEnabledWeaponsMesh (!state);
if (playerSpriteGameObject.activeSelf != state) {
playerSpriteGameObject.SetActive (state);
}
checkEventState (state);
}
public void checkEventState (bool state)
{
if (state) {
eventOnSpriteEnabled.Invoke ();
} else {
eventOnSpriteDisabled.Invoke ();
}
}
public void setSpriteAnimatorActiveStateFromEditor (bool state)
{
setSpriteAnimatorActiveState (state);
}
}