728x90

Assets > Plugins > IOS에 AppPauseHandler.mm 파일을 추가한다.

#import <UIKit/UIKit.h>

@interface AppPauseHandler : NSObject
@end

@implementation AppPauseHandler

+ (void)load {
    // 백그라운드로 전환될 때 실행
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(appWillResignActive)
                                                 name:UIApplicationWillResignActiveNotification
                                               object:nil];

    // 다시 포커스를 얻을 때 실행
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(appDidBecomeActive)
                                                 name:UIApplicationDidBecomeActiveNotification
                                               object:nil];
}

+ (void)appWillResignActive {
    // 유니티 화면을 덮을 검은색 뷰 추가
    UIView *blackView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    blackView.backgroundColor = [UIColor blackColor];
    blackView.tag = 9999; // 태그 추가 (나중에 제거하기 위함)

    dispatch_async(dispatch_get_main_queue(), ^{
        UIWindow *window = [UIApplication sharedApplication].keyWindow;
        if (window) {
            [window addSubview:blackView];
        }
    });
}

+ (void)appDidBecomeActive {
    // 다시 게임으로 돌아올 때 검은 화면 제거
    dispatch_async(dispatch_get_main_queue(), ^{
        UIWindow *window = [UIApplication sharedApplication].keyWindow;
        UIView *blackView = [window viewWithTag:9999];
        if (blackView) {
            [blackView removeFromSuperview];
        }
    });
}

@end

 

 

 

이렇게 하면 포커스를 잃었을 때 검은 화면이 나오고, 다시 포커스 찾았을때 복구된다.

728x90

 

 

스크롤바의 value가 0~1이 아닌건, pivot이 0.5로 되어 있어서 일 것이다.

그런 경우에서 스크롤바를 위 아래로 내려야 한다면, 

 

public ScrollRect scrollRect;
scrollRect.normalizedPosition = new Vector2(0, 1);

 

Vector2(0,0)은 가장 아래로 (0,1)은 가장 위로.

728x90

레터박스: 화면의 가로세로 비율(aspect ratio)이 게임이 설정된 비율과 다를 때 빈 공간을 화면의 상단/하단 또는 좌우에 채워주는 방식

초동수사는 화면의 가로세로 비율을 고정시켜 놓는다.

using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class CameraResolution : MonoBehaviour
{
    private void Awake()
    {
        // 현재 GameObject에 부착된 Camera 컴포넌트를 가져오는 코드
        Camera cam = GetComponent<Camera>();

        // 현재 카메라의 뷰포트 영역을 가져오는 코드
        Rect viewportRect = cam.rect;

        // 원하는 가로 세로 비율을 계산하는 코드
        float screenAspectRatio = (float)Screen.width / Screen.height;
        // float targetAspectRatio = 22f / 9f; // 테스트
        float targetAspectRatio = 13f / 6f; // 원하는 고정 비율 설정 (예: 16:9)

        // 화면 가로 세로 비율에 따라 뷰포트 영역을 조정하는 코드
        if (screenAspectRatio < targetAspectRatio)
        {
            // 화면이 더 '높다'면 (세로가 더 길다면) 세로를 조절하는 코드
            viewportRect.height = screenAspectRatio / targetAspectRatio;
            viewportRect.y = (1f - viewportRect.height) / 2f;
        }
        else
        {
            // 화면이 더 '넓다'면 (가로가 더 길다면) 가로를 조절하는 코드.
            viewportRect.width = targetAspectRatio / screenAspectRatio;
            viewportRect.x = (1f - viewportRect.width) / 2f;
        }

        // 조정된 뷰포트 영역을 카메라에 설정하는 코드
        cam.rect = viewportRect;
    }
}

 

 

다른 게임에도 항상 이걸 쓰는데... 아이폰의 경우는 거의 대부분 레터박스가 안 보이거나 조금 보인다. 애플만세.

하지만 아이패드와 갤럭시는 어쩔 수 없이 경우가 다른데, 레터박스가 잘 보이는 경우 아래와 같은 현상이 나온다.

 

 

편집은 구찮으니... 대강 뒷쪽에 나온다...

 

 

이렇게 잔상이 남아버리는데, 그럴땐 마지막에

void OnPreRender() => GL.Clear(true, true, Color.black);

 

이렇게 넣어주면 된다. 내 경우에는 이걸로 해결되었다.

 

 

 

그리고 또 다른 문제가 있었는데, 레터박스가 깜빡깜빡 플리커 현상도 있었다.

당시에는

Camera.main.Render();

 

이걸 쓰고 있었기 때문에 그런 현상이 일어난 거였다.

지우면 괜찮아졌음.

 

하지만 그래도 그런 현상이 안 사라진다면, 다른 사람들은 Camera컴포넌트의 Clear Flags를 Solid Color나 Skybox로 하면 된다고한다. 이미 이 게시글에 들어왔을 땐 저거 다 해보고 들어왔겠지만...

 

 


참고로 동영상의 게임은 "초동 수사"라는 게임이다. 그렇다! 내가 만든 것이다!

도움이 되었다면, 한 번씩 해보고 가시면 very very 감사하다.

 

[android]

https://play.google.com/store/apps/details?id=com.loomiloomi.crimescene

 

[ios]

https://apps.apple.com/kr/app/%EC%B4%88%EB%8F%99%EC%88%98%EC%82%AC-%EC%A6%9D%EC%96%B8-%EC%A6%9D%EA%B1%B0-%EC%B6%94%EB%A6%AC%EA%B2%8C%EC%9E%84/id6499072416

 

‎초동수사 - 증언/증거 추리게임

‎Episode 1. 자택에서 친구들과 놀던 평범한 여대생 "나 미녀"가 갑작스럽게 사망했다. 그런데, 주변 사람들의 대화 내용이 심상치 않다!? ======== 안 남찬: "아니요! 저희는 밥을 먹고 있었을 뿐입니

apps.apple.com

 

728x90

 

 

Static 설정도 하고, Navigation에서 Generate OffMeshLinks도 체크하고 이것 저것 다 설정했는데도 Bake했을때 

 

 

 

이렇게 안잡아주는 건. Navigation > Bake > Generated Off Mesh Links의 Drop Heigth가 0으로 되어 있을 것이다.

 

 

 

유니티 문서를 확인해보면 알 수 있다.

https://docs.unity3d.com/kr/2021.3/Manual/nav-BuildingOffMeshLinksAutomatically.html

 

 

 

 

 

728x90

 

 

여러 방법이 있다.

scrollRect.verticalNormalizedPostion = 0f; 또는

scrollbar.value = 0f; 

 

근데 나같은 경우는 동적으로 목록을 만들기 때문에 목록을 만드는 도중 스크롤바를 0으로 만들면, '만드는 도중의 상황'에서 스크롤이 가장 아래이기 때문에 맞지 않다.

아니면 목록을 다 만들고 스크롤을 가장 아래로 내릴땐 목록이 아래로 내려가는게 다 보인다.

 

그래서 내가 선택한 방법은 Contents의 Pivot Y를 0으로 바꾼다.

그럼 목록을 만들때 Contents의 높이가 위로 올라가기 때문에 스크롤을 건드릴 필요가 없다.

 

728x90

 

내 컴은 Mac이고, icloud 자동 동기화를 하고 있는데, 이거 때문이다.

 

build한 폴더를 다른 경로로 옮긴다음에 다시 열어 보면 열린다.

예를 들어 Desktop위치로 옮기면 열린다.

 

728x90

 

 

 

A 프로젝트 작업하다가 B 프로젝트 가면 간혹 무한로딩을 하는디... 


다른 에러가 뜨지 않는다면....

일단, 기다려보삼...

 

나 같은 경우는 한 20분 가량 기다려본적 있다ㅏ... ㅋㅋㅋ

어차피 강제종료하고 다시 켜봤자 똑같으니까.

그냥 믿고 기다리삼.

 

다음 부터는 다시 잘 열릴테니까... (아닐때도 있었음 따흑)

728x90

 

 

애드몹 테스트 아이디를 넣었을땐 문제 없는데, 실제 Id를 넣게 되면 이런 에러가 뜰 수가 있다.

 

1. ATT를 제대로 설정 해놨는지 확인해보자.(https://loomiloomi.tistory.com/42)

2. 리워드광고 인데 리워드 전면 광고로 만든건 아닌지 확인해보기..

 

나는 둘다 겪어봤다... 쒯.! 결국 휴먼이슈!

+ Recent posts