using System; using DefaultNamespace; using DefaultNamespace.FSM; using Unity.Behavior; using UnityEngine; using Action = Unity.Behavior.Action; using Unity.Properties; [Serializable, GeneratePropertyBag] [NodeDescription(name: "FindPlayerControllerByRaycast", story: "Find [Target] with racyast from [Agent]", category: "Action", id: "d762456f044989271ec06e8848cbfa15")] public partial class FindPlayerControllerByRaycastAction : Action { [SerializeReference] public BlackboardVariable Target; [SerializeReference] public BlackboardVariable Agent; [SerializeReference] public BlackboardVariable MaxDistance = new(10); protected override Status OnStart() { if (Agent.Value == null) return Status.Failure; // setup your node return Status.Running; } protected override Status OnUpdate() { if (Physics.Raycast(Agent.Value.transform.position, Agent.Value.transform.forward, out RaycastHit hit, MaxDistance)) { if (hit.transform.GetComponent() != null) { Target.Value = hit.transform.gameObject; return Status.Success; } } Target.Value = null; return Status.Failure; } protected override void OnEnd() { } }