ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (20) 아이템 오류 해결 & 스테이지 맵 카메라 축소 기능
    Galaxy Ball/2. 싱글플레이 - 스토리모드 2024. 6. 3. 11:31

     

     

    전부터 계속 풀지 못하던 오류가 하나 있었다. 

    분명 예전에는 이러지 않았던것 같은데 아이템을 추가한 이후로 몇몇 발사아이템의 팽창 속도가 다르다는것

     

    분명 똑같은 코드가 들어갔는데도 왜 이렇게 심하게 차이가 나는건지 이유를 찾을수가 없었다

     void expand()
     {
         if (rigid == null || iscolliding) return;
         if (rigid.velocity.magnitude > 0.01f) return;
         if (Input.GetMouseButton(0)) return;
    
         if (!hasExpanded)
         {
             SwellSound.Play();
         }
         transform.localScale += Vector3.one * increase * Time.deltaTime;
         hasExpanded = true;
     }

    *팽창 관련 코드*

     

    그리고 드디어 차이점을 찾았다. 왼쪽의 정상적으로 팽창하는 오브젝트의 스프라이트는 구체로 되어있고,

    너무 빨리 팽창하는 오브젝트의 스프라이트에는 이미지가 들어가있다

     

    그래서 도대체 이게 무슨 상관인가 싶지만 확실한건 이미지 파일을 빼고 처음부터 2D Object - Circle로 만든다면

    이런 오류가 발생하지 않는다는것.

     

     

    그래서 이렇게 같은 아이템인데도 불구하고 노랑구체에 따로 별모양 이미지를 입혀준 왼쪽과

    처음부터 이미지를 만들어 넣어준 오른쪽 팽창속도의 차이가 있었던것이다

     

    아무튼 이제라도 알았으니 모든 아이템들의 속성을 이미지가 아니라 처음부터 2D 오브젝트로 바꿔주었다

    이제 더이상 팽창속도가 달라지는 오류는 일어나지 않게 되었다

     

    ------------------------------------------

     

    이번엔 게임에 한가지 기능을 추가하려 한다 

     

    상당히 넓은 게임의 맵. 위 사진 정도로 축소를 시켜 게임을 진행할수도 없고, 

    그렇다고 확대를 해서 진행하자니 너무 시야가 좁아 넓은 맵이 보이질 않는다

     

    그래서 생각한것이 스테이지 맵 축소 기능 버튼을 따로 만들어야겠다는것이다

    처음엔 버튼을 누르면 맵을 축소시켜주고, 다시 눌러 확대를 해야만 이동이 가능하도록 해야하나 싶었는데

    그러면 축소해서 다음 스테이지 위치보고, 다시 확대해서 찾아가고, 다시 축소해서 보고, 확대하고...

    너무 번거로워질것 같으니 최종 결정한것은 축소를 시킨 상태에서도 유닛을 움직일수 있도록 해줘야겠다. 

    대신 100%, 75%, 50% 느낌으로 축소의 비율을 정할수 있도록 해주는것이다

     

    일단 버튼을 만들어주자

    using UnityEngine;
    using TMPro;
    
    public class CameraReduction : MonoBehaviour
    {
        private Camera mainCamera;
        private int currentIndex = 0;
        private float[] sizes = { 15f, 30f, 45f };
        private string[] sizeTexts = { "100%", "75%", "50%" };
    
        public TextMeshProUGUI buttonText; // 버튼 텍스트 참조
    
        void Start()
        {
            mainCamera = Camera.main;
            if (mainCamera == null)
            {
                Debug.LogError("Main Camera not found!");
            }
            UpdateButtonText(); // 초기 텍스트 설정
        }
    
        public void ChangeCameraSize()
        {
            if (mainCamera != null)
            {
                currentIndex = (currentIndex + 1) % sizes.Length;
                mainCamera.orthographicSize = sizes[currentIndex]; // 카메라 크기 즉시 변경
                UpdateButtonText();
            }
        }
    
        private void UpdateButtonText()
        {
            if (buttonText != null)
            {
                buttonText.text = sizeTexts[currentIndex];
            }
        }
    }

     

    버튼 클릭 한번에 카메라의 사이즈를 변경해준다. 사이즈는 클릭한번에 각각 [15,30,45]로 배열로 선언해준뒤

    클릭을 한번 할때마다 배열을 돌게 해주었다

     

    그리고 TextMeshPro 타입으로 입력받아 클릭할때마다 버튼의 텍스트도 변경되도록 하였다

     

    해당 스크립트는 버튼이 아니라 사이즈가 변경될 카메라에 부착되게 된다

    텍스트는 버튼텍스트 넣어줌

    근데 버튼을 눌러야 카메라 사이즈가 변경되는것이기 때문에 당연히 버튼에도 변화를 줘야 한다

     

    우선 해당 버튼에 On Click을 새로 만든뒤 그 안에 Main Camera를 집어넣는다

    그리고 Function에 방금 집어넣은 코드중에서도 카메라 사이즈를 변경하는 ChangeCameraSize 메서드를 선택해준다

    이렇게 되면 이제 버튼을 클릭할때마다 ChangeCameraSize() 메서드가 실행되는것이다

     

     

     

    이제 버튼을 클릭할때마다 배율이 번갈아가며 확대/축소되고 텍스트까지 바뀌는것을 확인할 수 있다

Designed by Tistory.