plantilla base para movimiento básico
This commit is contained in:
Robii Aragon
2026-02-05 05:07:55 -08:00
parent ed7b223c04
commit fd87a6ffd5
14441 changed files with 13711084 additions and 20 deletions

View File

@@ -0,0 +1,232 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class pauseAnimationSystem : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public bool pauseAnimationEnabled = true;
public bool pauseAnimatorStateInsteadOfReduceFrames;
[Range (1, 60)] public int numberOfFrames = 1;
public bool pauseAnimationActive;
[Space]
[Header ("Transform List Settings")]
[Space]
public bool storeTransformListOnStart;
public List<Transform> transformList = new List<Transform> ();
[Space]
[Header ("Debug")]
[Space]
public bool showDebugPrint;
public bool transformListStored;
[Space]
[Header ("Components")]
[Space]
public playerController mainPlayerController;
public Animator animator;
Dictionary<int, Snapshot> snapshots = new Dictionary<int, Snapshot> ();
float updateTime = 0f;
Coroutine pauseCoroutine;
Transform currentSaveSnapshotTarget;
void Start ()
{
if (pauseAnimationActive) {
if (storeTransformListOnStart) {
if (!transformListStored) {
if (transformList.Count == 0) {
storeCharacterBones ();
} else {
transformListStored = true;
}
}
}
}
}
private void LateUpdate ()
{
if (pauseAnimationActive) {
if (Time.time - updateTime > 1f / numberOfFrames) {
SaveSnapshot ();
updateTime = Time.time;
}
foreach (KeyValuePair<int, Snapshot> item in snapshots) {
item.Value.currentTransform.localPosition = item.Value.localPosition;
item.Value.currentTransform.localEulerAngles = item.Value.localEulerAngles;
}
}
}
private void SaveSnapshot ()
{
foreach (Transform child in transformList) {
currentSaveSnapshotTarget = child;
int uid = currentSaveSnapshotTarget.GetInstanceID ();
snapshots [uid] = new Snapshot (currentSaveSnapshotTarget);
}
}
public void setPauseAnimationActiveState (bool state)
{
if (state && !pauseAnimationEnabled) {
return;
}
pauseAnimationActive = state;
}
public void activatPauseAnimationXSeconds (float newDuration)
{
if (pauseCoroutine != null) {
StopCoroutine (pauseCoroutine);
}
if (!pauseAnimationEnabled) {
return;
}
pauseCoroutine = StartCoroutine (activatPauseAnimationXSecondsCoroutine (newDuration));
}
IEnumerator activatPauseAnimationXSecondsCoroutine (float newDuration)
{
if (!transformListStored) {
if (transformList.Count == 0) {
storeCharacterBones ();
} else {
transformListStored = true;
}
}
if (showDebugPrint) {
print ("activatPauseAnimationXSecondsCoroutine " + newDuration);
}
bool pauseActivatedOnThisAction = false;
if (pauseAnimatorStateInsteadOfReduceFrames) {
if (!mainPlayerController.overrideAnimationSpeedActive) {
mainPlayerController.setOverrideAnimationSpeedActiveState (true);
mainPlayerController.setReducedVelocity (0);
pauseActivatedOnThisAction = true;
}
} else {
pauseAnimationActive = true;
}
WaitForSeconds delay = new WaitForSeconds (newDuration);
yield return delay;
if (pauseAnimatorStateInsteadOfReduceFrames) {
if (pauseActivatedOnThisAction || mainPlayerController.getAnimSpeedMultiplier () == 0) {
if (!mainPlayerController.isAnimSpeedMultiplierChangedDuringXTimeActive ()) {
mainPlayerController.setOverrideAnimationSpeedActiveState (false);
mainPlayerController.setReducedVelocity (1);
}
}
} else {
pauseAnimationActive = false;
}
}
public void setNumberOfFrames (int newValue)
{
numberOfFrames = newValue;
}
public void storeCharacterBones ()
{
transformList.Clear ();
transformList.Add (animator.GetBoneTransform (HumanBodyBones.Head));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.Neck));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.Chest));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.Spine));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.Hips));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.RightShoulder));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.LeftShoulder));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.RightLowerArm));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.LeftLowerArm));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.RightUpperArm));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.LeftUpperArm));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.RightHand));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.LeftHand));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.RightLowerLeg));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.LeftLowerLeg));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.RightUpperLeg));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.LeftUpperLeg));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.RightFoot));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.LeftFoot));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.RightToes));
transformList.Add (animator.GetBoneTransform (HumanBodyBones.LeftToes));
transformListStored = true;
for (int i = transformList.Count - 1; i >= 0; i--) {
if (transformList [i] == null) {
transformList.RemoveAt (i);
}
}
if (!Application.isPlaying) {
updateComponent ();
}
}
void updateComponent ()
{
GKC_Utils.updateComponent (this);
GKC_Utils.updateDirtyScene ("Update Pause Animation System transform list", gameObject);
}
[System.Serializable]
public class Snapshot
{
public Transform currentTransform;
public Vector3 localPosition;
public Vector3 localEulerAngles;
public Snapshot (Transform newTransform)
{
currentTransform = newTransform;
UpdateTransformValues ();
}
public void UpdateTransformValues ()
{
localPosition = currentTransform.localPosition;
localEulerAngles = currentTransform.localEulerAngles;
}
}
}