Short Cake
8PM - Animal Crossing Wild World

사생활 보호 설정

https://gamjia.tistory.com

Mini Rooms

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

What Friends Say

한마디로 표현해봐~

1촌평 관리

수박게임 개발일지 - 16

GamJia 2023. 12. 25. 23:03

수박게임 개발일지 16편
크리스마스에도

개발은 계속된다

는 구라고 친구가 없다

 

사실 오늘부터 빌드 좀 하고

출시 관련 파일 정리 하려고 했는데

주말에 뻘짓 하느라

오늘 다시 옵션으로 돌아갔다

 

주말에 한 뻘짓

Input.GetMouseButton(0)으로

조종하기 때문에 위의 UI 공간에

마우스를 갔다대도 기능이 동작한다

 

하지만 버튼을 누르려고 한건데

멋대로 캡슐이 떨어지면..? 좀 글차나..

그래서 처음에는 Claw에

If(EventSystem.current.IsPointerOverGameObject)

일 경우에 return을 시키려고 했다

 

저 위에 코드는 만약 내가 UI 객체(캔버스)를

클릭하거나, 건드렸을 경우에는

밑에 있는 기능들은 수행하지 않는 코드이다

 

확실히 성능은 좋았다

버튼을 클릭하면 Claw가 이동하지 않고

드랍하지 않았다

 

하지만 매우 심각한 문제가 하나 있었으니

 

그건 바로

 

Claw도 UI 객체라는 것이다

 

그럼 저 코드가 있을 경우에

Claw가 아무 기능도 못하는 것이다

 

Claw를 Canvas 밖으로 빼면 되는것 아니냐?

할 수도 있지만

배경 객체가 전부 Canvas 안에 있기 때문에

사실상 불가능 했다

 

그래서 배경이랑 Claw를 캔버스 밖으로 꺼내자니

Rect Transform과, Anchor Preset이 신경쓰이고..

 

그래서 어떡하면 좋을까 하다가

Canvas 안에 있는 Recttransform 객체의

사이즈와 위치를 받아와서

 

Canvas 밖에 박아버리는 기행을 저지른것이다

 

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

public enum SizeElement
{
    Top,
    Middle,
    Bottom,
    Claw,
}


public class SizeResizer : MonoBehaviour
{
    
    public RectTransform UIElement; // UI 요소의 RectTransform
    [SerializeField] private SizeElement sizeElement;
    void Start()
    {

        switch (sizeElement)
        {
            case SizeElement.Top:
                ResizeTop();
                break;

            case SizeElement.Middle:
                ResizeMiddle();
                break;

            case SizeElement.Bottom:
                ResizeBottom();
                break;

            case SizeElement.Claw:
                ResizeClaw();
                break;

        }
        
    }

    void ResizeTop()
    {
        Vector3 worldPosition = GetUIElementWorldPosition(UIElement);
        transform.position = worldPosition;

        Vector3 worldScale = GetUIElementWorldScale(UIElement) * 100f;
        transform.localScale = worldScale;
    }

    void ResizeMiddle()
    {
        Vector3 worldPosition = GetUIElementWorldPosition(UIElement);
        float ratio = 1+(float)Screen.width / (float)Screen.height;

        transform.position = worldPosition;
        Vector3 worldScale = GetUIElementWorldScale(UIElement);

        Vector3 localScaleDelta = new Vector3(worldScale.x * 100, ratio, worldScale.z * 100);
        transform.localScale = localScaleDelta;
    }

    void ResizeBottom()
    {
        // UI 요소의 월드 좌표를 구함
        Vector3 worldPosition = GetUIElementWorldPosition(UIElement);
        transform.position = worldPosition;

        Vector3 worldScale = GetUIElementWorldScale(UIElement) * 100f;
        transform.localScale = worldScale;
    }

    void ResizeClaw()
    {
        Vector3 worldPosition = GetUIElementWorldPosition(UIElement);
        transform.position = worldPosition;

        Vector3 worldScale = GetUIElementWorldScale(UIElement) * 100f;
        transform.localScale = worldScale;
    }

    Vector3 GetUIElementWorldPosition(RectTransform UIElement)
    {
        Vector3 worldPosition = UIElement.TransformPoint(Vector3.zero);
        return worldPosition;
    }

    Vector3 GetUIElementWorldScale(RectTransform UIElement)
    {
        Vector3 worldScale = UIElement.lossyScale;
        return worldScale;
    }

}

이게 그 해당코드다

근데 재밌는건 꽤 잘 먹혔다

 

대신 중간에 늘어나는 부분

구현이 좀 힘들어서

그냥 저 코드를 갔다버렸다

 

다시 캔버스로 복귀..

 

그럼 어떻게 하면 좋을까 하다가

 

bool CheckMouseYPosition()
{
    float ratioInt=(float)Screen.height/13;

    if(Input.mousePosition.y < (float)Screen.height-ratioInt)
    {
        return true;
    }

    else
    {
        return false;
    }

}

 

Claw 클래스에 이 내용을 추가했다

 

쉽게 설명하면 전체 세로 길이에서

세로 길이 / 13 값을 빼서

그것보다 마우스 좌표가 밑에 있을 경우에는

Drag나 Drop이 되게 한 것이다

 

암튼 주말동안 헛짓거리 했다

그리고 오늘 옵션창 UI를

드디어 손 봤다

 

(스포 : 저번에 만든 audioSlider는 갖다버림)

 

배경음악을 바꿨다

 

내일은

 

 

 

[ 기능 연결 및 출시 준비 ]

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

수박게임 개발일지 - 18  (0) 2023.12.27
수박게임 개발일지 - 17  (0) 2023.12.26
수박게임 개발일지 - 15  (2) 2023.12.22
수박게임 개발일지 - 14  (0) 2023.12.21
Aseprite의 숨겨진 꿀 기능 "Replace Color"  (0) 2023.12.21