본문 바로가기
Unity/TIL

Unity 팀프로젝트 현황

by 김차루 2024. 6. 5.
스파르타 내배캠 35일차 TIL
C1조_ 1조라도 안 보이면

 

 

 

 

컨디션 이슈로 진행이 하루 씩 밀린 기분이다... 플레이어를 완료하고 슬슬 다른 쪽을 진행하고 싶은 마음과 집중이 안된다는 핑계로 딴 짓을 하는 마음이 상충되는 하루였다. 어쨌든 오늘 완료한 작업에 대해 작성 해보도록 하겠다. 

 

 

팀 과제 진행 현황

달리기 - 스태미나 사용

달릴 때 스태미나 사용

플레이어가 달릴 때 스태미나를 사용하고 스태미나를 전부 사용하면 달릴 수 없다. 달리기를 안 할 때는 스태미나가 다시 누적된다.

플레이어 - 애니메이션

플레이어 애니메이션

플레이어의 기본 자세, 걷는 자세, 뛰는 자세를 달리하여 적용 시켰다.

 

 

팀 과제 진행 예정

플레이어가 잡혔을 때

추격자에게 잡혔을 때 게임 오버가 되는 화면 구성 및 구현. 

 

맵 전체 조명 수정 및 손전등 끄고 켜기

맵 전체적인 조도를 낮추고 플레이어가 손전등을 착용했을 때 끄고 켤 수 있게 구현

 

 

트러블 슈팅

1. 애니메이션 연속 호출

애니메이션 오류

오류를 급하게 수정하느라 오류 난 화면을 찍을 생각을 못해서 이미지를 대신 가져왔다. 발생한 오류는 Idle이나 Walk 상태일 때 Run 애니메이션을 동작하게 하면 Run01-Forward가 끝까지 플레이 되지 않고 계속 호출되는 상황이 있었다. 나는 달리기 할 때 애니메이션을 불러오는 과정이 잘못된 줄 알았는데 그것이 아니었다. 걷다가 뛰게 되면 IsWalking, IsRunning 값 모두 true값이 되서 walk와 run이 짧게 반복되고 있었다. 그래서 호출하는 코드 부분에 서로 겹치지 않게 코드를 추가했다.

 

 

Delegate / Action 사용

델리게이트에 대한 자세한 내용은 다른 블로그를 참고하길 바란다... 

이전까지는 공부 해보니 엄청 유용하고 많이 써먹겠는데? 싶었지만 막상 사용하려면 어떻게 사용하지 한참 바라보기만 했던 것 같다. 그런데 요번 기회에 쉽게 다른 메소드를 호출하여 사용하고 싶어서 큰 결심을 해봤다. 결론은 나름 성공적. 이렇게 쓰는 것이 100점인가 하면 잘 모르겠지만 어쨌든 코드가 문제 없이 돌아가니 다행이지 않나 싶다. 

 

일단 프로젝트에 이벤트로 호출할 메소드를 컨트롤할 수 있는 스크립트를 만들었다. 

public class Controller : MonoBehaviour // WK interact 이벤트 함수 생성
{
    public event Action<Vector2> OnMoveEvent;
    public event Action<Vector2> OnLookEvent;
    public event Action<float> OnRunEvent;
    public event Action OnInventoryEvent;
    public event Action OnInteracEvent;

    public void CallMoveEvent(Vector2 direction)
    {
        OnMoveEvent?.Invoke(direction);
    }

    public void CallLookEvent(Vector2 direction)
    {
        OnLookEvent?.Invoke(direction);
    }

    public void CallRunEvent(float value)
    {
        OnRunEvent?.Invoke(value);
    }

    public void CallInventoryEvent()
    {
        OnInventoryEvent?.Invoke();
    }

    public void CallInteracEvent()
    {
        OnInteracEvent?.Invoke();
    }
}

 

그리고 정의한 메서드를 이용해서 A라는 행동을 할 때 이 이벤트가 작동될 수 있게 정의된 함수를 호출했다. 

public void OnLook(InputValue value)
{
    mouseDelta = value.Get<Vector2>();
    CallLookEvent(mouseDelta);
}

public void OnRun(InputValue value)
{
    float runValue = value.Get<float>();
    CallRunEvent(runValue);
}

public void OnInventory(InputValue value)
{
    CallInventoryEvent();
}

 

마지막으로 A 행동할 때 호출되게 되는 함수를 event로 불러올 수 했다. 

private void Start()
{
    CharacterManager.Instance.Player.controller.OnMoveEvent += Move;
    CharacterManager.Instance.Player.controller.OnInventoryEvent += UseInventory;
    CharacterManager.Instance.Player.controller.OnRunEvent += Run;
    CharacterManager.Instance.Player.controller.OnLookEvent += Camera;
}

private void Move(Vector2 direction)
{
    ...
}

 private void Run(float value)
 {
     ...
 }
 
 ...

 

 

'Unity > TIL' 카테고리의 다른 글

3번째 팀프로젝트 마무리  (0) 2024.06.11
Unity FBX 파일, 에셋 애니메이션  (2) 2024.06.07
Unity InputSystem: Send Message  (1) 2024.06.04
유니티 숙련 팀프로젝트 게임 기획  (0) 2024.06.03
3번째 과제 마무리  (1) 2024.05.30