Easy Chapter Generator
EnglishEspañol

Conectar movimiento sin crear una dependencia

IPathMovementAdapter e INpcRouteAdapter permiten que ObjectTransportAction solicite movimiento sin referenciar un producto de navegación, tween o IA. El ensamblado de integración del proyecto conoce la API externa y solo se compila cuando esa dependencia existe.

Así, la ausencia del complemento opcional no rompe el núcleo ni elimina los modos de transporte.

Límite con otros productos

No existe una integración de SWS incluida. Conecta SWS, otro paquete de rutas, AutoHand, Meta XR u otro entorno de VR mediante código adaptador o notificaciones propias del proyecto; ninguno es obligatorio ni se redistribuye.

Responsabilidad de cada interfaz

InterfazMétodoDatos
IPathMovementAdapterStartMovement(Transform, MonoBehaviour)Objeto y componente de ruta
INpcRouteAdapterStartRoute(MonoBehaviour, bool, string, float)Ruta, proximidad, ID opcional y velocidad

PathMovement busca el adaptador en los MonoBehaviours de Subject. NpcRoute utiliza el MonoBehaviour asignado y comprueba que implemente la interfaz.

Reglas de implementación

  • Valida Subject y Path Source.
  • Define qué ocurre con dos solicitudes: sustituir, encolar o rechazar.
  • Gestiona cancelación y disable en el adaptador.
  • Completa solo al confirmar la llegada, no al iniciar la ruta.
  • Utiliza el ID proporcionado únicamente cuando esa opción esté activada.
  • Aísla tipos externos mediante ensamblados o símbolos de compilación.

Matriz de aceptación

CasoResultado
Falta Path SourceAdvertencia y ninguna llamada
No hay adaptador en SubjectAdvertencia con contexto
NpcAdapter no implementa la interfazNo comienza la ruta
Solicitud válidaUna llamada exacta con las opciones configuradas
Ruta interrumpidaSe aplica la política del adaptador sin falsa finalización
LlegadaPuede completar el ID exacto y comprueba la aceptación

El ejemplo incluido mueve hacia el Transform del origen de ruta para demostrar la interfaz; no es un sistema de navegación.

Implementar un adaptador de movimiento

Dónde colocarlo
Añade el adaptador al mismo objeto de movimiento asignado en ObjectTransportAction.
Cuándo llamarlo
PathMovement llama a StartMovement con el objeto que debe moverse y el MonoBehaviour configurado como origen de ruta.
Comportamiento
Este adaptador mínimo se mueve hasta pathSource.transform y no calcula rutas. Sustituye la corrutina por la API de movimiento del proyecto o proveedor.
using System;
using System.Collections;
using System.Collections.Generic;
using OverFuture.ChapterObjectiveSystem.Chapters;
using OverFuture.ChapterObjectiveSystem.Events;
using OverFuture.ChapterObjectiveSystem.Objectives;
using OverFuture.ChapterObjectiveSystem.Persistence;
using OverFuture.ChapterObjectiveSystem.Progression;
using UnityEngine;

public sealed class SimplePathMovementAdapter : MonoBehaviour, IPathMovementAdapter
{
    [SerializeField, Min(0.01f)]
    private float speed = 2f;

    private Coroutine movementRoutine;

    public void StartMovement(Transform subject, MonoBehaviour pathSource)
    {
        if (subject == null || pathSource == null)
        {
            return;
        }

        if (movementRoutine != null)
        {
            StopCoroutine(movementRoutine);
        }

        movementRoutine = StartCoroutine(
            MoveTo(subject, pathSource.transform.position));
    }

    private IEnumerator MoveTo(Transform subject, Vector3 destination)
    {
        while (subject != null &&
               (subject.position - destination).sqrMagnitude > 0.0001f)
        {
            subject.position = Vector3.MoveTowards(
                subject.position,
                destination,
                Mathf.Max(0.01f, speed) * Time.deltaTime);
            yield return null;
        }

        movementRoutine = null;
    }
}