본문 바로가기

기타/패스트캠퍼스 Unity

유니티 입문 패스트캠퍼스 챌린지 12일차

플레이어 이동하기 (1)

- SystemManager에 Player 접근 경로 추가

- InputController에서 이동 방향을 계산하여 SystemManager를 통해 Player의 기능 호출

- 이동속도를 SerializedField 변수로 만들어서 조절

 

[SerializeField]
Player player;

public Player Hero
{
    get
    {
        return player;
    }
}

SystemManager에 player를 추가하고

    void UpdateInput()
    {
        Vector3 moveDirection = Vector3.zero;

        if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
        {
            moveDirection.y = 1;
        }
        if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
        {
            moveDirection.y =- 1;
        }
        if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
        {
            moveDirection.x = -1;
        }
        if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
        {
            moveDirection.x = 1;
        }

        SystemManager.Instance.Hero.ProcessInput(moveDirection);
    }

이전에 작성했던 InputController를 수정하고

    [SerializeField]
    float Speed;

    void UpdateMove()
    {
        transform.position += MoveVector;
    }
    
    public void ProcessInput(Vector3 moveDirection)
    {
        MoveVector = moveDirection * Speed * Time.deltaTime;
    }

Player의 코드에 속도를 추가하고 유니티 플레이어 인스펙터에서 스피드 값을 지정한다.

 

방향키를 사용해서 플레이어를 움직여 볼 수 있다.

 

플레이어 이동하기 (2)                                                                                                                            

- 화면 밖으로 이동하지 않도록 처리하기

- Player 프리팹 편집

- Player 클래스 수정

- 필요한 변수 링크

 

 플레이어 프리팹을 편집모드로 열어서 기존의 콜리더를 모두 삭제한다.

그리고 EmptyObject를 추가해서 PlayerColider로 만든다. 콜리더는 충돌을 감지하기 위한 역할을하며 경계면에 도달했을 때를 인식하기 위해 추가하는것이다.

충돌감지를 위해 박스 콜리더를 추가하는 모습

경계에 도달했을때 움직임을 막는 코드를 플레이어에 추가한다.

    [SerializeField]
    BoxCollider boxCollider;

    [SerializeField]
    Transform MainBGQuadTransform;
    
    void UpdateMove()
    {
        if (MoveVector.sqrMagnitude == 0)
            return;

        MoveVector = AdjustMoveVector(MoveVector);

        transform.position += MoveVector;
    }
    
    Vector3 AdjustMoveVector(Vector3 moveVector)
    {
        Vector3 result = Vector3.zero;

        result = boxCollider.transform.position + boxCollider.center + moveVector;

        if (result.x - boxCollider.size.x * 0.5f < -MainBGQuadTransform.localScale.x * 0.5f)
            moveVector.x = 0;
        if (result.x + boxCollider.size.x * 0.5f > MainBGQuadTransform.localScale.x * 0.5f)
            moveVector.x = 0;
        if (result.y - boxCollider.size.y * 0.5f < -MainBGQuadTransform.localScale.y * 0.5f)
            moveVector.y = 0;
        if (result.y + boxCollider.size.y * 0.5f > MainBGQuadTransform.localScale.y * 0.5f)
            moveVector.y = 0;

        return moveVector;
    }

유니티엔진을 이용해서 직접 충돌을 감지하게 할수도 있지만, 콜리더의 x,y 좌표를 직접 계산해서 플레이어가 경계면을 벗어났는지 검사하는 방식을 사용했다.

 

https://fastcampus.co.kr/dev_online_game

 

C#과 유니티로 배우는 게임 개발 올인원 패키지 Online. | 패스트캠퍼스

현직 게임업계 게임 개발자 직강 C# 프로그래밍부터 게임 물리와 수학까지 모두 정복!

fastcampus.co.kr

https://bit.ly/3FVdhDa

 

수강료 100% 환급 챌린지 | 패스트캠퍼스

딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.