Programación
Adaptadores de movimiento y rutas
Conecta los sistemas de movimiento del proyecto mediante IPathMovementAdapter o INpcRouteAdapter sin crear una dependencia directa del producto.
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.
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
| Interfaz | Método | Datos |
|---|---|---|
| IPathMovementAdapter | StartMovement(Transform, MonoBehaviour) | Objeto y componente de ruta |
| INpcRouteAdapter | StartRoute(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
| Caso | Resultado |
|---|---|
| Falta Path Source | Advertencia y ninguna llamada |
| No hay adaptador en Subject | Advertencia con contexto |
| NpcAdapter no implementa la interfaz | No comienza la ruta |
| Solicitud válida | Una llamada exacta con las opciones configuradas |
| Ruta interrumpida | Se aplica la política del adaptador sin falsa finalización |
| Llegada | Puede 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;
}
}