Short Cake
8PM - Animal Crossing Wild World

사생활 보호 설정

https://gamjia.tistory.com

Mini Rooms

  • 내 미니룸
  • 미니미설정
  • 미니룸설정
  • 답글수 [0]

What Friends Say

한마디로 표현해봐~

1촌평 관리

퍼즐게임 개발일지 - 20

GamJia 2024. 3. 21. 04:17

퍼즐게임 개발일지 20편

귀찮은건 정말 싫어

 

 

갑분 포트폴리오?

사실 이건 작년에 만들었던 1인 개발 게임이다

4월에 만들었으니 거의 1년이 다 되어가네

 

암튼 작년에 만든 게임들을 보면

대부분 hierachy에서 원하는 데이터들을

직접 옮겨서 썼었다

난 사실 getcomponent도 잘 못썼다

 

작년이랑 올해랑 다른 점이라면

이 과정을 안하려고 한다는거겠지......

하나 만들어두고 여러곳에서 개꿀ㅋㅋ

이렇게 쓰고 싶단 말이다............

 

 

어제 내용을 보면 Event Trigger를 만들고

이벤트를 하나하나 넣어주고

Cinemachine까지 넣어주었다

근데 생각해보니 이 Event Trigger를

퍼즐에 써도 좋겠다 싶었고

다른 Scene에서도 쓰면 좋을 것 같았다

 

근데 1000개가 넘는 퍼즐과

다른 Scene에 직접 저걸 넣자니 귀찮았다

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using Cinemachine;

public class EventTriggerManager : EventTrigger
{
    void Awake()
    {
        EventTrigger eventTrigger = GetComponent<EventTrigger>() ?? gameObject.AddComponent<EventTrigger>();
    }

    public override void OnBeginDrag(PointerEventData data)
    {
        CinemachineManager.Instance?.SetDragging(true);
    }

    public override void OnEndDrag(PointerEventData data)
    {
        CinemachineManager.Instance?.SetDragging(false);
    }


}

 

그래서 EventTrigger를 상속받는 코드로 만들었다

(Pointer 관련은 굳이 필요 없을거 같아서

Drag만 넣어주었다)

 

 

퍼즐 부분에는 해당 코드를 넣어주고

핸들에는 저렇게 직접 연결해주었다

 

 

플레이 해도 저렇게 떠서

"이거 안되는거 아냐..?" 싶지만

기능에는 전혀 문제가 없다

아~~주 잘 된다ㅋㅋ

 

 

퍼즐이랑 핸들을 선택했을 때와

이동이 Trigger Manager가 잘 구분해줘서

이 두 내용이 완전히 필요없게 됐다

괜히 이미지의 raycast를 일일이 건들지 않아도

되고, 확인하지 않아도 된다 너무 조아앙

 

 

그리고 사실 내가 말했었나?

카메라를 움직이는 부분은

플랫폼에 따라 내용이 좀 다르다

 

위에는 콤퓨타, 밑에는 핸드폰 기준이다

콤퓨타는 스크롤, 핸드폰은 손가락으로

줌 인을 하기에 내용을 다르게 써뒀다

 

핸드폰으로 확대 하는 부분은

이대로도 나쁘지 않은거 같아서

콤퓨타 부분을 수정해보았다

 

float scroll = Input.GetAxis("Mouse ScrollWheel");
if (Mathf.Abs(scroll) > 0.01f)
{
    float targetSize = Mathf.Clamp(cinemachineCamera.m_Lens.OrthographicSize - (scroll * 6f), minOrthographicSize, maxOrthographicSize);
    if (sizeChangeCoroutine != null)
    {
        StopCoroutine(sizeChangeCoroutine); 
    }
    sizeChangeCoroutine = StartCoroutine(ChangeSizeSmoothly(cinemachineCamera.m_Lens.OrthographicSize, targetSize));
}

///////////////////////////////////////////////////////////////////////////////////////////////////

IEnumerator ChangeSizeSmoothly(float fromSize, float toSize)
    {
        float elapsedTime = 0f;
        float duration = 0.2f;
        while (elapsedTime < duration)
        {
            cinemachineCamera.m_Lens.OrthographicSize = Mathf.Lerp(fromSize, toSize, elapsedTime / duration);
            elapsedTime += Time.deltaTime;
            yield return null;
        }
        cinemachineCamera.m_Lens.OrthographicSize = toSize;
    }

 

 

저 내용을 그림으로 쉽게 설명해보았다

0.1씩 띡 띡 올라가던 렌즈 사이즈가

좀 더 부드럽게 변경되었다

 

중간에 줌 인 하다가 줌 아웃을 하던가

이런식의 과정이 있을 수도 있기에

예를 들어 줌인 코루틴이 진행 중인데

야 나와. 줌 아웃 할래 라고 하면

바로 진행중인 코루틴을 멈추고

다른 코루틴을 진행할 수 있게 해주었다

 

 

 

'Game Develop' 카테고리의 다른 글

퍼즐게임 디자인일지 - 16  (0) 2024.03.25
퍼즐게임 개발일지 - 21  (0) 2024.03.22
퍼즐게임 개발일지 - 19  (0) 2024.03.20
퍼즐게임 디자인일지 - 15  (0) 2024.03.19
퍼즐게임 디자인일지 - 14  (0) 2024.03.18