평타 스킬

Eunho Bae·2022년 5월 21일

스킬 쓰는 동안 플레이어 움직임 제한

class PlayerController {
...

protected override void UpdateController()
    {
        switch(State)
        {
            case CreatureState.Idle:
                GetDirInput();
                GetIdleInput();
                break;
            case CreatureState.Moving:
                GetDirInput();
                break;
        }

        base.UpdateController();
    }
    
    ...
    
    void GetIdleInput()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            State = CreatureState.Skill;
            _coSkill = StartCoroutine("CoStartPunch");
        } 
    }

    IEnumerator CoStartPunch()
    {
        GameObject go = Managers.Obj.Find(GetFrontCellPos()); // 내가 바라보고 있는 방향 +1
        if(go != null)
        {
            Debug.Log(go.name);
        }

        yield return new WaitForSeconds(0.5f);
        State = CreatureState.Idle;
        _coSkill = null;
    }

위 코드에서 플레이어가 Idle인 상태에서 방향을 업데이트하고 GetIdleInput() 함수를 호출하여 코루틴 함수를 호출시켜준다.
만약 플레이어의 State가 Idle인 상태에서 스페이스바를 누르면 State를 Skill로 바꿔주고 (CreatureController::UpdateController의 switch 문에서 Skill로 분기) 코루틴 함수를 호출시켜준다. 내가 바라보고 있는 방향에서 한 칸 앞에 다른 Creature가 존재하는지 확인 후 있으면 이름을 출력해준다. 0.5초 동안 스킬을 시전해준 후 State를 다시 Idle로 맞춰주도록 동작한다.

   public Vector3Int GetFrontCellPos()
    {
        Vector3Int cellPos = CellPos;
        switch(_lastDir)
        {
            case MoveDir.Up:
                cellPos += Vector3Int.up;
                break;
            case MoveDir.Down:
                cellPos += Vector3Int.down;
                break;
            case MoveDir.Left:
                cellPos += Vector3Int.left;
                break;
            case MoveDir.Right:
                cellPos += Vector3Int.right;
                break;
        }

        return cellPos;
    }

그리고 GetFrontCellPos() 함수도 정의해 주었는데 내가 마지막으로 바라본 방향의 앞 칸의 좌표를 반환해준다. 만약 범위 공격 스킬이라면 Vector3Int.up (0,1,0)에 5를 곱해주는 방식으로 응용할 수도 있겠다.

profile
개인 공부 정리

0개의 댓글