Game Develop

수박게임 재개발일지 - 6

GamJia 2025. 2. 9. 04:22

수박게임 재개발일지 6편
시간이 너무 빠르다
 

마지막으로 개발 일지를 올렸을 때가
아직 두번째 게임인 나이프 마스터를
한참 개발할 때 였는데..
지금은 벌써 네번째 게임 개발중이니..
시간이 너무 빠르다
 

나 왜 캔버스를 2개 나눈거지..?
게임 영역과 UI 영역을 구분하려고?
귀찮아서 그냥 합쳤다
 

 
 
Cocos에서는 Background에
Button Component를 추가하면
밑에 있는 객체의 event의 진행을 쉽게 막는다
 
처음으로 Cocos가 그리워진 순간
 

 public EnableTouchEvents(enable: boolean)
 {
    const method = enable ? 'on' : 'off';

    input[method](Input.EventType.TOUCH_START, this.GetMouseButtonDown, this);
    input[method](Input.EventType.TOUCH_MOVE,this.GetMouseButton,this);
    input[method](Input.EventType.TOUCH_END, this.GetMouseButtonUp, this);

}

 
회사에서는 이럴 때 주로 이런 이벤트
등록, 해제를 관리하는데 이것처럼
터치 이벤트로 관리하기로 했다
 

using UnityEngine;
using UnityEngine.EventSystems;

public class ClawManager : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler
{
    [SerializeField] private Claw claw;

    public void OnPointerDown(PointerEventData eventData)
    {
        claw.BeginDrag();
    }

    public void OnDrag(PointerEventData eventData)
    {
        claw.OnDrag();
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        claw.EndDrag();
    }
}

 
기존에 Claw의 Update에 돌아가던 내용을
ClawManager라는 녀석이 관리하게 해주었다
그리고 이 녀석을 Claw의 부모 객체로 적용했다
 

 
그리고 그 위에 UI 배경을 두었더니
밑에 있는 ClawManager의 TouchEvent가 막혀서
좌우 이동이 안되는 모습이다
머지, 생성과는 관련 없다 단지 이동만 안되는 것
 

 
마우스 커서가 안보이지만..
암튼 UI가 있을 때는 배경의 영향으로
드래그가 안되는 모습이다
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public enum SettingType
{
    Sound,
    Haptic
}

public class SettingButton : MonoBehaviour
{
    public SettingType settingType = SettingType.Sound;

    [SerializeField] private Sprite activeImage;
    [SerializeField] private Sprite inActiveImage;

    private Image buttonImage;
    private Text buttonText;

    void Awake()
    {
        buttonImage = GetComponent<Image>();
        buttonText = GetComponentInChildren<Text>();
    }

    void OnEnable()
    {
        if (settingType == SettingType.Sound)
        {
            bool isBGM = PlayerPrefs.GetInt("isBGM", 1) == 1; 
            UpdateSetting(isBGM);
        }
        else if (settingType == SettingType.Haptic)
        {
            bool isVib = PlayerPrefs.GetInt("isVib", 1) == 1; 
            UpdateSetting(isVib);
        }
    }

    public void ChangeSetting()
    {
        if (settingType == SettingType.Sound)
        {
            bool isBGM = PlayerPrefs.GetInt("isBGM", 1) == 1;
            isBGM = !isBGM; // 반전
            PlayerPrefs.SetInt("isBGM", isBGM ? 1 : 0); 
            UpdateSetting(isBGM);
        }
        else if (settingType == SettingType.Haptic)
        {
            bool isVib = PlayerPrefs.GetInt("isVib", 1) == 1;
            isVib = !isVib; // 반전
            PlayerPrefs.SetInt("isVib", isVib ? 1 : 0); 
            UpdateSetting(isVib);
        }
    }

    private void UpdateSetting(bool isActive)
    {
        buttonImage.sprite = isActive ? activeImage : inActiveImage;

        if (buttonText != null)
        {
            buttonText.text = isActive ? "Yes!" : "Nope!";
        }
    }
}

 
Setting 버튼에 Setting창 활성/비활성
애니메이션을 연결해주고
설정창이 활성화 될 때마다 저장한 정보를
불러오는 기능을 연결해주었다
 
 

 
설정창이 활성화 될 때는 Claw의 이동 기능이
동작 안하고, 설정 정보가 잘 저장되는걸 확인했다
이걸 이용해서 AudioManager, NiceVibration
시스템을 변경할 수 있다
 
마지막에는 게임 오버 연출 변경된걸 찍어보았다
사실 좀 부끄럽지만 심심해서 디지몬 노래를 틀었는데
너무 신나서 몸을 흔들다가 멀미가 생겼다;;;;
나중에 해야겠다 미치겠다.............제정신 아니다..
 
https://www.youtube.com/watch?v=h3QiuepzaMQ

메튜 오빠 노래 왜케 잘부르냐