RequestObjectiveCompletion devuelve false
Comprueba ObjectiveId, el estado Linked y que ese registro sea el objetivo activo, no solo uno existente.
Programación
Implementa, enlaza, prueba, repite y reinicia un detector propio del proyecto derivado de la clase base Objective real.
Esta guía crea un detector de reliquias que completa el objetivo activo cuando recibe tres recogidas. Un capítulo puede contener muchos objetivos ordenados, pero solo activa el siguiente registro elegible. La subclase detecta una condición del juego; Chapter sigue decidiendo si el ID, el estado y la posición permiten avanzar.
La clase pública real es OverFuture.ChapterObjectiveSystem.Objectives.Objective. El método protegido RequestObjectiveCompletion() devuelve true solo cuando el Chapter acepta la solicitud.
using OverFuture.ChapterObjectiveSystem.Objectives; y hereda de Objective.requiredRelics y un contador temporal privado.IsCompleted, incrementa el contador y llama a RequestObjectiveCompletion() al alcanzar el límite.ResetObjective(), llama primero a base.ResetObjective() y limpia el contador.CollectRelicObjective al contenedor Objective XX generado.NotifyRelicCollected(). El tercer aviso válido debe completar el registro activo.false y no repetir On Completed.ResetObjective() desde una prueba o reinicia la progresión que llama al reset físico. Comprueba que el contador vuelve a cero.No necesitas escribir un CustomEditor para obtener Objective Link, Completion y los diagnósticos comunes. El editor alternativo admite subclases de Objective y dibuja después sus campos serializados propios. Crea un CustomEditor solo si tu componente necesita controles especializados; en ese caso, conserva la superficie de enlace y no llames al Inspector de otro editor dentro del tuyo.
Si el sistema externo no puede heredar de Objective, no crees una segunda jerarquía de progresión. Obtén ChapterManager.Instance, comprueba HasActiveObjective y llama a CurrentChapter.TryCompleteObjective(CurrentObjectiveId). Esta vía es adecuada para las notificaciones de diálogo, inventario o middleware.
La llamada devuelve false si no hay objetivo activo, el capítulo no coincide o la solicitud ya fue aceptada. Consulta el ejemplo compilado de Completar y controlar la progresión.
Comprueba ObjectiveId, el estado Linked y que ese registro sea el objetivo activo, no solo uno existente.
La subclase no ha sobrescrito ResetObjective() o no ha llamado a la implementación base.
No emitas efectos antes de conocer el resultado. Ejecuta las consecuencias solo cuando RequestObjectiveCompletion() devuelve true.
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 CollectRelicObjective : Objective
{
[SerializeField, Min(1)]
private int requiredRelics = 3;
private int collectedRelics;
public bool NotifyRelicCollected()
{
if (IsCompleted)
{
return false;
}
collectedRelics++;
return collectedRelics >= Mathf.Max(1, requiredRelics) &&
RequestObjectiveCompletion();
}
public override void ResetObjective()
{
base.ResetObjective();
collectedRelics = 0;
}
}