AIChaseComponent

플레이어나 다른 엔티티를 추적하는 AI입니다. StateComponent가 없다면 자동으로 추가됩니다.

# Properties

[{"index":"float DetectionRange","0":"추적 감지 거리입니다. 대상의 거리가 이보다 멀어지면 추적을 중단하고, 가까워지면 다시 추적을 시작합니다."}]

[{"index":"boolean IsChaseNearPlayer","0":"값이 true인 경우 DetectionRange 프로퍼티 값 내에서 가장 가까운 플레이어를 자동으로 추적합니다. TargetEntityRef 프로퍼티 또는 SetTarget(Entity) 함수로 지정한 대상이 있는 경우 플레이어 대신 지정한 대상을 추적합니다."}]

[{"index":"EntityRef TargetEntityRef (ReadOnly)","0":"추적 대상이 될 엔티티를 정합니다."}]

##### inherited from AIComponent:

[{"index":"string BehaviourTreeId (ReadOnly)","0":"행동 트리 엔트리의 고유 식별자입니다."}]

[{"index":"Blackboard BlackBoard (ReadOnly)","0":"AI 행동 트리에서 사용하는 데이터 저장소입니다. 키-값 쌍으로 데이터를 관리하며 행동 트리 노드 간 데이터를 공유합니다."}]

[{"index":"boolean IsLegacy (ReadOnly)","0":"Legacy 시스템 지원 여부를 설정합니다. 이전 시스템은 노드의 Running 상태를 구현하기 위해 ExclusiveExecutionWhenRunning 프로퍼티를 사용해야 합니다. Legacy 시스템은 더 이상 지원하지 않으며, 추후 삭제 예정입니다."}]

[{"index":"boolean LogEnabled (ReadOnly)","0":"값이 true면 행동 트리가 실행될 때 실행 관련 정보가 로그로 출력됩니다. 메이커 환경에서만 동작합니다."}]

[{"index":"UpdateAuthorityType UpdateAuthority (ReadOnly)","0":"업데이트 권한입니다. Server와 Client 중 설정한 곳에서 실행됩니다."}]

##### inherited from Component:

[{"index":"boolean Enable (Sync)","0":"컴포넌트 활성화 여부를 확인합니다."}]

[{"index":"boolean EnableInHierarchy (ReadOnly) (HideFromInspector)","0":"계층 구조상에서 이 컴포넌트가 Enable 상태인지를 반환합니다. Enable이 true일지라도 엔티티의 Enable이 false라면 false를 반환합니다."}]

[{"index":"Entity Entity (ReadOnly)","0":"이 컴포넌트를 소유한 엔티티입니다."}]

# Methods

[{"index":"Entity GetCurrentTarget()","0":"추적 대상 엔티티를 반환합니다."}]

[{"index":"void SetTarget(Entity targetEntity)","0":"targetEntity를 추적하도록 설정합니다. 함수 호출 시 IsChaseNearPlayer 프로퍼티는 자동으로 비활성화됩니다"}]

##### inherited from AIComponent:

[{"index":"BTNode CreateLeafNode(string nodeName, func -> BehaviourTreeStatus onBehaveFunction)","0":"Action 노드를 생성합니다. 노드가 실행될 때 onBehaveFunction으로 전달된 함수가 호출됩니다. onBehaveFunction의 매개 변수는 프레임당 시간인 delta입니다."}]

[{"index":"BTNode CreateNode(string nodeType, string nodeName = nil, func -> BehaviourTreeStatus onBehaveFunction = nil)","0":"BTNodeType을 기반으로 Action 노드를 생성합니다. nodeType은 BTNodeType의 타입명입니다. onBehaveFunction가 nil이 아니라면 노드가 실행될 때 BTNodeType의 OnInit(), OnBehave() 함수 대신 onBehaveFunction으로 전달된 함수가 호출됩니다. onBehaveFunction의 매개 변수는 프레임당 시간인 delta입니다."}]

[{"index":"void SetRootNode(BTNode node)","0":"node를 최상위 노드로 설정합니다."}]

##### inherited from Component:

[{"index":"boolean IsClient()","0":"현재 실행 환경이 클라이언트인지 아닌지의 여부를 반환합니다."}]

[{"index":"boolean IsServer()","0":"현재 실행 환경이 서버인지 아닌지의 여부를 반환합니다."}]

# Examples

몬스터가 가까이 있는 적을 무작정 따라가지 않고, 자신을 공격한 대상을 추적하는 예제입니다. Chase 몬스터에 예제 코드를 작성한 컴포넌트를 추가해 사용할 수 있습니다.
    
    
    @Component
    script AIAggroDisplay extends Component
        @ExecSpace("ServerOnly")
        method void OnBeginPlay()
        local aiChaseComponent = self.Entity.AIChaseComponent
        if aiChaseComponent == nil then
        	return
        end
    
        aiChaseComponent.IsChaseNearPlayer = false
    
        local chatBallon = self.Entity.ChatBalloonComponent
        if chatBallon == nil then
        	chatBallon = self.Entity:AddComponent(ChatBalloonComponent)
        end
    
        chatBallon.ChatModeEnabled = false
        chatBallon.ShowDuration = 1
        chatBallon.HideDuration = 0
        chatBallon.FontSize = 1.2
        end
    
        @ExecSpace("ServerOnly")
        method void OnUpdate(number delta)
        if self.Entity.ChatBalloonComponent == nil then
        	return
        end
    
        local currentTargetEntity = self.Entity.AIChaseComponent:GetCurrentTarget()
        if currentTargetEntity == nil then
        	self.Entity.ChatBalloonComponent.AutoShowEnabled = false
        else
        	self.Entity.ChatBalloonComponent.AutoShowEnabled = true
        	self.Entity.ChatBalloonComponent.Message = "target is "..currentTargetEntity.Name
        end
        end
    
        @EventSender("Self")
        handler HandleHitEvent(HitEvent event)
        --------------- Native Event Sender Info ----------------
        -- Sender: HitComponent
        -- Space: Server, Client
        ---------------------------------------------------------
    
        -- Parameters
        local AttackCenter = event.AttackCenter
        local AttackerEntity = event.AttackerEntity
        local Damages = event.Damages
        local Extra = event.Extra
        local FeedbackAction = event.FeedbackAction
        local IsCritical = event.IsCritical
        local TotalDamage = event.TotalDamage
        ---------------------------------------------------------
        if self.Entity.AIChaseComponent == nil then
        	return
        end
    
        self.Entity.AIChaseComponent:SetTarget(AttackerEntity)
        end
    end
    

# SeeAlso

  * AIComponent
  * StateComponent