add ckg
plantilla base para movimiento básico
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class simpleMoveObjectSystem : MonoBehaviour
|
||||
{
|
||||
[Header ("Main Settings")]
|
||||
[Space]
|
||||
|
||||
public bool movementEnabled = true;
|
||||
|
||||
public float movementSpeed = 5;
|
||||
|
||||
[Space]
|
||||
[Header ("Components")]
|
||||
[Space]
|
||||
|
||||
public Transform targetPositionTransform;
|
||||
|
||||
public Transform objectToMove;
|
||||
|
||||
|
||||
Coroutine movementCoroutine;
|
||||
|
||||
|
||||
public void activateMovement ()
|
||||
{
|
||||
if (!movementEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
stopActivateMovement ();
|
||||
|
||||
movementCoroutine = StartCoroutine (activateMovementCoroutine ());
|
||||
}
|
||||
|
||||
void stopActivateMovement ()
|
||||
{
|
||||
if (movementCoroutine != null) {
|
||||
StopCoroutine (movementCoroutine);
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator activateMovementCoroutine ()
|
||||
{
|
||||
float dist = GKC_Utils.distance (targetPositionTransform.position, objectToMove.position);
|
||||
|
||||
float duration = dist / movementSpeed;
|
||||
|
||||
Vector3 targetPosition = targetPositionTransform.position;
|
||||
Quaternion targetRotation = targetPositionTransform.rotation;
|
||||
|
||||
float movementTimer = 0;
|
||||
|
||||
float angleDifference = 0;
|
||||
|
||||
float positionDifference = 0;
|
||||
|
||||
bool targetReached = false;
|
||||
|
||||
float t = 0;
|
||||
|
||||
while (!targetReached) {
|
||||
t += Time.deltaTime / duration;
|
||||
|
||||
objectToMove.position = Vector3.Lerp (objectToMove.position, targetPosition, t);
|
||||
objectToMove.rotation = Quaternion.Lerp (objectToMove.rotation, targetRotation, t);
|
||||
|
||||
angleDifference = Quaternion.Angle (objectToMove.localRotation, targetRotation);
|
||||
|
||||
positionDifference = GKC_Utils.distance (objectToMove.localPosition, targetPosition);
|
||||
|
||||
movementTimer += Time.deltaTime;
|
||||
|
||||
if ((positionDifference < 0.01f && angleDifference < 0.2f) || movementTimer > (duration + 1)) {
|
||||
targetReached = true;
|
||||
}
|
||||
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user