PlayerControllerComponent

Player의 조작과 연관된 컴포넌트입니다. 입력과 액션을 연동하고 그 흐름을 제어합니다.

# Properties

[{"index":"boolean AlwaysMovingState (Sync)","0":"항상 걷기 애니메이션을 재생할지 여부를 결정합니다."}]

[{"index":"int32 FixedLookAt (Sync)","0":"이동 시에 바라보는 방향을 한쪽으로 고정합니다."}]

[{"index":"boolean IsUpdateBlocked (ReadOnly) (HideFromInspector)","0":"플레이어의 입력 처리가 현재 차단되었는지 여부를 나타냅니다. 맵 이동과 같이 일시적으로 플레이어의 조작을 막아야 할 때 true가 됩니다."}]

[{"index":"float LookDirectionX (Sync)","0":"현재 X축을 기준으로 캐릭터가 바라보고 있는 방향입니다. 양수일 경우 오른쪽, 음수일 경우 왼쪽입니다."}]

[{"index":"boolean UseCustomScript (ReadOnly)","0":"직접 만든 스크립트를 사용하기 위한 속성입니다.true면 PlayerControllerComponent의 일부 기능이 비활성화되고, 직접 만든 스크립트 사용을 사용할 수 있습니다."}]

##### 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":"void ActionAttack() (ScriptOverridable)","0":"Attack Key를 입력했을 때 동작입니다."}]

[{"index":"void ActionClimb(Vector2 moveOffset, float climbHeight) (ScriptOverridable)","0":"MoveUp, MoveDown Key를 입력했을 때 동작입니다. 사다리나 로프를 오르는 액션을 수행합니다.지정된 위치 오프셋과 높이를 기준으로 등반 가능한 Entity가 있는지 확인하고, 등반 상태로 전환을 시도합니다."}]

[{"index":"boolean ActionClimb(Vector2 moveOffset, float climbHeight, float horizontalInput)","0":"사다리나 로프를 오르는 액션을 수행합니다.지정된 위치 오프셋과 높이를 기준으로 등반 가능한 Entity가 있는지 확인하고, 등반 상태로 전환을 시도합니다."}]

[{"index":"void ActionCrouch() (ScriptOverridable)","0":"Crouch Key를 입력했을 때 동작입니다."}]

[{"index":"void ActionDownJump() (ScriptOverridable)","0":"ActionDownJump가 일어났을 때 동작입니다."}]

[{"index":"boolean ActionDownJump(float horizontalInput)","0":"다운 점프 액션을 실행합니다."}]

[{"index":"void ActionEnterPortal() (ScriptOverridable)","0":"Portal Key를 입력했을 때 동작입니다."}]

[{"index":"void ActionInteraction(KeyboardKey key, boolean isKeyDown) (ScriptOverridable)","0":"Interaction key를 입력했을 때 동작입니다."}]

[{"index":"void ActionJump() (ScriptOverridable)","0":"Jump Key를 입력했을 때 동작입니다."}]

[{"index":"boolean ActionJump(float horizontalInput)","0":"점프 액션을 실행합니다."}]

[{"index":"void ActionSit() (ScriptOverridable)","0":"Sit Key를 입력했을 때 동작입니다."}]

[{"index":"void AddCondition(string actionName, func -> boolean conditionFunction) (ClientOnly)","0":"action 발동 조건을 추가합니다."}]

[{"index":"string GetActionName(KeyboardKey key) (ClientOnly)","0":"key에 매핑된 action의 이름을 반환합니다."}]

[{"index":"void RemoveActionKey(KeyboardKey key) (ClientOnly)","0":"정의된 key에 연결된 액션을 제거합니다."}]

[{"index":"void RemoveAllActionKeyByActionName(string actionName) (ClientOnly)","0":"정의된 이름에 연결된 액션을 모두 제거합니다."}]

[{"index":"void SetActionKey(KeyboardKey key, string actionName, func -> boolean conditionFunction = nil) (ClientOnly)","0":"key와 action을 매핑합니다."}]

##### inherited from Component:

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

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

# Events

[{"index":"ChangedLookAtEvent","0":"PlayerControllerComponent에서 캐릭터가 바라보는 방향이 변경될 때 발생합니다."}]

[{"index":"PlayerActionEvent","0":"플레이어가 Action을 사용하면 발생하는 이벤트입니다."}]

# Examples

"Jump", "Portal", "Crouch", "Attack", "Sit"와 같이 사전에 정의되어 있는 액션 이름에 키보드 입력을 추가로 연결하고,  
사용자 정의 액션 이름을 키보드 입력과 연결하여 로그를 찍는 예제입니다.

키보드 B키로 공격, 키보드 N키로 점프가 가능해지며,  
키보드 G키로 사용자 지정 액션 이름이 로그에 출력되는것을 확인할 수 있습니다.
    
    
    @Component
    script PlayerInputMapper extends Component
        @ExecSpace("ClientOnly")
        method void OnBeginPlay()
        self.Entity.PlayerControllerComponent:SetActionKey(KeyboardKey.B, "Attack")
        self.Entity.PlayerControllerComponent:SetActionKey(KeyboardKey.N, "Jump")	 
        self.Entity.PlayerControllerComponent:SetActionKey(KeyboardKey.G, "MyPlayerAction")
        end
    
        @EventSender("Self")
        handler HandlePlayerActionEvent(PlayerActionEvent event)
        -- Parameters
        local ActionName = event.ActionName
        local PlayerEntity = event.PlayerEntity
        --------------------------------------------------------
        log(ActionName)
        end
    end
    

# SeeAlso

  * AvatarRendererComponent
  * StateComponent
  * StateStringToAvatarActionComponent
  * [플레이어 설정과 제어](/docs?postId=547)