ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024.2.2
    TIL 2024. 2. 2. 21:03

    으어어어

    강의 듣는데 계속 한 개씩 빼먹거나 잘못누르거나 그래서 생각보다 엄청 늦어져서 다 못끝냈습니다.

    제대로만 했으면 정말 다 끝내는건데..

    근데 마지막까지도 무슨 문제가 자꾸 생겨나네요.. 더 만들기 무섭게 ㄷㄷ

     

    계속 2D에 대해서 만들었다면 이번 것은 3D 입니다.

    만들면서 보니깐 요즘 핫한 그 게임 생각나더라구요.. 그건 3인칭이긴한데.. ㅎ

     

    완강을 한 것도 아니고 지금 완벽히 이해했어! 도 아니기때문에 강의를 듣다가 이건 개인 프로젝트할 때나 나중에 게임만들 때 쓰면 좋을 것 같은 걸 골라서 적어보도록 하겠습니다.


     

    1. UI Image 크기 조절

    Fill Method와 Fill Origin을 잘 설정해준다면 왼쪽에서 오른쪽으로 HP가 채워지거나 반대로 깍이거나를 쉽게 만들 수 있습니다.

    단, Fill Amount의 최대가 1이므로 현재 체력 / 최대 체력 을 해줘서 설정해줘야합니다.

     


     

    2. GetComponent +@

    component를 가져오기 위해서는 GetComponent를 이용해줍니다. 더 나아가서 TryGetComponent<>(out )을 사용해준다면 component가 있다면 out에 저장해주면서 true를 반환하고 없다면 false를 반환합니다.

    Parse 와 TryParse 랑 비슷하다고 느껴집니다.

     


     

    3. Light

    3D에만 있는 기능입니다. 빛이 어느 방향으로 빛추면 어디는 좀 더 어둡고 어디는 좀 더 밝고 가 가능하기도 하며, 빛의 색을 변화시킬 수 있기 때문에 더 어둡게, 더 밝게도 가능하게 해줍니다.

     

    원을 1/4로 나눠서 가장 위에는 태양이 가장 높게 올라가는 낮이고 가장 아래는 태양이 가장 아래에 있는 자정이라고 생각하면 좋습니다. 따라서 달은 그 반대로 태양이 가장 높은 위치에서는 가장 낮은 위치에 있고 태양이 가장 낮은 곳에 있으면 달이 가장 높은.. 그렇다고 생각하면..

     

    0.25일 때 태양이 가장 높은 위치이고 0.75일 때 달이 가장 높은 위치입니다.

    그것을 이용해서 해와 달을 만들고 둘이 서로 반대편에서 시계 방향으로 돈다고 보면 됩니다.

    transform.eulerAngles = (time - (lightSource == sun ? 0.25f : 0.75f)) * noon * 4.0f;
    //noon은 정오

     


     

    4. 아이템 보여주기

    가장 신기했던 부분입니다. 바라보는 아이템이 있다면 UI로 아이템의 정보를 뜨게 해주는 방법입니다.

    Ray를 사용해서 해주는 방법인데 생각해보면 Ray에 대해 적은 적은 없는 것 같습니다.

    Ray에 대해서 깔끔하게 아는 것도 아니라서 딱히 적은 것은 없는 것 같은데.. 

    쉽게 생각하면 눈에서 직선의 광선이 나와서 광선에서 부딪히는 것들의 정보를 가져오는? 이라고만 기억하고 있습니다.

    그래서 Ray는 보통 눈이 되어주는 3D에서 카메라에 많이 하는 편이고 2D에서는 마우스의 위치라고 볼 수 있습니다.

    Raycast는 빔을 쏘는 것이고 

    RaycastHit은 빔을 쏘는데 맞는 오브젝트가 있다면 가져오는 것 입니다.

                Ray ray = camera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2));
                RaycastHit hit;
    
                if (Physics.Raycast(ray, out hit, maxCheckDistance, layerMask))
                {
                    if (hit.collider.gameObject != curInteractGameobject)
                    {
                        curInteractGameobject = hit.collider.gameObject;
                        curInteractable = hit.collider.GetComponent<IInteractable>();
                        SetPromptText();
                    }
                }

     

    + 부딪히는 오브젝트의 정보를 가져오는 부분은 SetPromptText()입니다.

    script를 통해 text를 굵게 해줄 수 있는 방법은 <b>text</b> 입니다.

     


     

    5. 폰트

    Text(MeshPro)를 사용하면 편하긴 하지만 기본 폰트는 한글을 지원하지 않습니다.

    그렇기 때문에 폰트를 변경해줘야하는데요.

    폰트 중에서도 원하는 값들만 받을 수 있도록 지정해줄 수 있습니다.

     

    Window - TextMeshPro - Font Asset Creator

     

    Source Font File - 베이스가 될 폰트

    Character Set - 사용 가능한 글자들(영어, 한글, 특수문자 등) 설정

    Character Sequence - Character Set을 Custom Range로 하게 된다면 나오는 부분

     

    32-126,44032-55203,12593-12643,8200-9900

    영어 범위 : 32-126

    한글 범위 : 44032-55203

    한글 자모 : 12593-12643

    특수 문자 : 8200-9900

    글꼴에 따라 지원하지 않는 특수 문자는 missing

     

    이렇게 설정해주면 됩니다.

     

    Generate Font Atlas 누르고 다 끝나면 Save 해주면 끝납니다!

     


     

    어느정도 초반은 정리가 된 것 같습니다.

    가장 중요한 인벤토리 부분부터 적과 싸우는 부분까지는 내일 정리해보겠습니다...

     

    아무래도 서바이벌류 게임을 만들다보니깐 이것 저것 생각할게 많아서 너무 양이 많네요 ㅠㅠ

    'TIL' 카테고리의 다른 글

    2024.2.7  (1) 2024.02.07
    2024.2.6  (0) 2024.02.06
    2024.2.1  (1) 2024.02.01
    2024.1.31  (0) 2024.01.31
    2024.1.30  (0) 2024.01.30
Designed by Tistory.