PlayerInput 방향키 이동 입력 상호작용 (f) 입력 q e 공격, 방어 회전 혹은 활성화//채굴선 공격 스페이스 공격 특수공격 발사 //채굴선 공격
PlayerMovement if(currentState == isIdle || ==isRunning) 입력에 따른 이동
PlayerInteraction 트리거 엔터로 if(interactionTarget != null){ interactionTarget.StopExplain();} //상호작용 대상이 무엇인지 설명하는 ui를 끄는 함수 Interactable interactionTarget = collider.GetComponent<Interactable>(); interactionTarget.Explain() ///현재 상호작용하려는 대상이 무엇인지 설명하는 ui를 키는 함수
OnTrigger2dExit Interactable target = collider.Getcomponent<Interactable>(); //벗어난 트리거가 상호작용 가능하던 타겟이었으면 ui 끄고 상호작용타겟 널로 바꾸고 if(target == interactionTarget){ target.StopExplaing(); interactionTarget = null;}
OnTrigger2DStay Interactable target = collider.Getcomponent<Interactable>(); if(target != null){ //지금 트리거에 있는데 상호작용가능하면 if(interactionTarget == null){ //상호작용 가능 두개가 겹쳐있어서 A들어갔다가 B겹치면 interactionTarget = null; //상호작용 연결된 타겟은 B 근데 B에서는 나가고 A영역이면 interactionTarget.Explain();} //트리거 엔터는 작동안하니까 스테이에서 연결된거 눌이면 if(playerInput.interact){ //상호작용 키 누르면 interactionTarget.Interact(gameObject);} //상호작용 시도 }
Interface IInteractable Explain: ui 활성화 StopExplain: ui 비활성화 Interact(GameObject subject)
탐사선: Interactable 가상 메서드 구현 Explain: 탑승 ui StopExplain: ui 비활성화 Interact(GameObject subject): 플레이어 위치를 채굴선 내부로 이동
Controller: MonoBehaviour, IInteractable 필드 GameObject pilot //누가 조종하고 있는지 가상 메서드 구현 Explain: 빈칸? StopExplain: ui 비활성화 Interact(GameObject subject): if(pilot != null){ pilot.currentState = isIdle; } pilot = subject.GetComponent<PlayerState>(); pilotInput = subject.GetComponent<PlayerInput>(); pilot.currentState = 해당 상태
PlayerState public enum State isControllingMovement isControllingAttack isControllingSHield isControllingPowerSystem isIdle isMining isRunning State currentSate
MovementController: Controller Explain 이동 제어 ui Interact(GameObject subject): base.Interact(GameObject subject);
MovementControl() pilotInput 확인해서 우주선 이동 코드