62. Unity 최종 프로젝트 3주차(3)

이규성·2024년 1월 25일
0

TIL

목록 보기
68/106

01/25

📌알고리즘 코드 카타 (Algorithm Code Kata)

시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

입출력 예

"AB"1"BC"
"z"1"a"
"a B z"4"e F d"
public class Solution
{
    public string solution(string s, int n)
    {
        string answer = "";
        char[] chars = s.ToCharArray();

        for (int i = 0; i < chars.Length; i++)
        {
            int num = chars[i];
            if (num >= 97 && num <= 122)
            {
                if (num + n > 122)
                {
                    chars[i] = (char)(96 + ((num + n) - 122));
                }
                else
                {
                    chars[i] = (char)(num + n);
                }
            }
            else if (num >= 65 && num <= 90)
            {
                if (num + n > 90)
                {
                    chars[i] = (char)(64 + ((num + n) - 90));
                }
                else
                {
                    chars[i] = (char)(num + n);
                }
            }
            answer += chars[i];
        }
        return answer;
    }
}

역시나 내 친구 ToCharArray() 메서드를 기본으로 이용하여 풀었다. z, Z를 넘어가면 a, A가 되는 것에서 약간 버벅임이 있었지만 조건문을 소문자 대문자를 걸러주어서 해결하였다.

📌팀 프로젝트 진행

Weapon 구현 설계

필요한 사항

공격 애니메이션

  1. 캐릭터의 손에 대검 위치 시킨다.
    대검의 위치를 수정하였다.
  2. 대검을 들었을 시 Idle 애니메이션 변경이 필요해 보인다.
    ToolSystem의 OnEquip 이벤트에 도구의 TwoHandedTool bool값을 판단해주는 함수를 구독한다.
    두 손 State를 만들어서 함수 내에 ChangeState를 해준다.
  3. 대검 공격 애니메이션의 콤보 어택이 통으로 되어 있던데 나눌 수 있는지 확인이 필요해 보인다.
    콤보가 나누어져 있는 것을 확인하였다. Player의 Animator에 추가하였다.

PlayerAttackState.cs, PlayerComboAttackState.cs

1. 위의 사항을 점검하고 알맞게 두 스크립트의 수정이 필요해 보인다.

Weapon.cs, Health.cs

1. FSM에 맞게 강의에 따라 우선 구현을 시도한다.
2. 정상적으로 무기 공격이 동작한다면 상태이상 시스템을 적용해 본다. 요건 나중에
https://teamsparta.notion.site/231211-4c21f35ab2dc494eb063a324a94e54de

금일 구현 설계

공격 시 target이 되는 몬스터를 rotate로 바라보게 만들자.
recipe로 만들 수 있는 것들의 종류를 늘리자.

금일 구현한 사항

  1. 공격 시 몬스터를 바라본다.

PlayerComboAttackState.cs

protected GameObject target;
protected string targetTag;

public override void Enter()
{
    base.Enter();
    StartAnimation(_stateMachine.Player.AnimationData.ComboAttackParameterHash);

    ToolItemData tool = _stateMachine.Player.EquippedItem.itemData as ToolItemData;

    var targets = Physics.OverlapSphere(_stateMachine.Player.transform.position, tool.range,
    tool.targetLayers);
    if (targets.Length == 0)
    {
        return;
    }
    if (targets[0].CompareTag(tool.targetTagName))
    {
        target = targets[0].gameObject;
        targetTag = target.tag;
        RotateOfTarget();
        return;
    }
}

private void RotateOfTarget()
{
    var look = target.transform.position - _stateMachine.Player.transform.position;
    look.y = 0;

    var targetRotation = Quaternion.LookRotation(look);

    _stateMachine.Player.transform.rotation = targetRotation;    
}

준욱님이 작성하신 코드를 기반으로 구현하였다. Slerp를 이용하여 부드럽게 동작하는 것을 시도하여 보았지만 잘 되지 않았다 . . . update문 안에서 구현해야하나?? 일단 급한 건 아니니 추후에 수정할 예정이다.

  1. 제작할 수 있는 아이템들을 추가하였다.

정민님이 레시피 베이스를 잘 구현해놓으셔서 모델의 위치 잡기와 어드레서블에 연결시켜 주는 작업만으로도 이슈 없이 구현할 수 있었다. 역시 고수 . . .

금일 이슈

현재 넉백 시스템이 몬스터의 rigidbody를 이용하여 실행되고 있는데 준욱님의 피드백으로 넉백 코드를 따로 빼서 컴포넌트 형식을 요청하셨다. 내일 트라이할 예정이다.

금일 커밋한 사항

공격 시 몬스터를 바라보는 기능을 추가하였습니다.
레시피 제작 아이템 중 EnchantedPickAxe를 추가하였습니다.
레시피 제작 목록을 업데이트 중입니다.
넉백 이슈로 인해 관련된 코드들을 주석처리하였습니다.

🤸🏻‍♀️Feedback

0개의 댓글