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,126 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class moveObjectSmoothlySystem : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public bool moveObjectSystemEnabled = true;
public Transform transformToMove;
[Space]
[Header ("Position State List Settings")]
[Space]
public List<objectPositionStateInfo> objectPositionStateInfoList = new List<objectPositionStateInfo> ();
objectPositionStateInfo currentObjectPositionStateInfo;
Coroutine movementCoroutine;
public void moveObjectToPosition (string positionName)
{
if (!moveObjectSystemEnabled) {
return;
}
stopMoveObjectToPositionCoroutine ();
if (gameObject.activeInHierarchy) {
movementCoroutine = StartCoroutine (moveObjectToPositionCoroutine (positionName));
}
}
public void stopMoveObjectToPositionCoroutine ()
{
if (movementCoroutine != null) {
StopCoroutine (movementCoroutine);
}
}
IEnumerator moveObjectToPositionCoroutine (string positionName)
{
bool isNewPosition = true;
int positionStateIndex = -1;
int objectPositionStateInfoListCount = objectPositionStateInfoList.Count;
for (int i = 0; i < objectPositionStateInfoListCount; i++) {
if (objectPositionStateInfoList [i].Name == positionName) {
if (objectPositionStateInfoList [i].isCurrentPosition) {
isNewPosition = false;
} else {
objectPositionStateInfoList [i].isCurrentPosition = true;
}
positionStateIndex = i;
currentObjectPositionStateInfo = objectPositionStateInfoList [i];
} else {
objectPositionStateInfoList [i].isCurrentPosition = false;
}
}
if (isNewPosition && positionStateIndex > -1) {
if (transformToMove == null) {
transformToMove = transform;
}
if (currentObjectPositionStateInfo.useDelayToMoveObject) {
yield return new WaitForSeconds (currentObjectPositionStateInfo.delayToMoveObject);
}
float dist = GKC_Utils.distance (transformToMove.localPosition, currentObjectPositionStateInfo.targetPosition);
float duration = dist / currentObjectPositionStateInfo.movementSpeed;
float translateTimer = 0;
float teleportTimer = 0;
bool targetReached = false;
while (!targetReached) {
translateTimer += Time.deltaTime / duration;
transformToMove.localPosition = Vector3.Lerp (transformToMove.localPosition, currentObjectPositionStateInfo.targetPosition, translateTimer);
teleportTimer += Time.deltaTime;
if ((GKC_Utils.distance (transformToMove.localPosition, currentObjectPositionStateInfo.targetPosition) < 0.03f) || teleportTimer > (duration + 1)) {
targetReached = true;
}
yield return null;
}
}
}
[System.Serializable]
public class objectPositionStateInfo
{
[Header ("Main Settings")]
[Space]
public string Name;
public Vector3 targetPosition;
public float movementSpeed;
[Space]
[Header ("Other Settings")]
[Space]
public bool useDelayToMoveObject;
public float delayToMoveObject;
[Space]
[Header ("Debug")]
[Space]
public bool isCurrentPosition;
}
}