OnAdClosed 핸들러가 작동하지 않아 보상 이벤트가 발생하지 못하는 문제가 생긴다.

 

OnAdRewarded에서 정상적으로 광고시청을 하여 광고창을 닫을때 보상을 주려고 하는데

OnAdClosed 핸들러가 정상적으로 실행되지 않으면 광고시스템이 작동하지 않을 있다.

 

이에 해결책으로 보상 내용을 Update문으로 옮겨서 해결할 있다.

 

[Google Admob Object]

void Start()
{
	MobileAds.Initialize(appID);
    rewardBasedVideoAd = RewardBasedVideoAd.Instance;
    
    rewardBasedVideoAd.OnAdLoaded += RewardBasedVideoAd_OnAdLoaded;
    rewardBasedVideoAd.OnAdFailedToLoad += RewardBasedVideoAd_OnAdFailedToLoad;
    rewardBasedVideoAd.OnAdRewarded += RewardBasedVideoAd_OnAdRewarded;
    rewardBasedVideoAd.OnAdClosed += RewardBasedVideoAd_OnAdClosed;
    rewardBasedVideoAd.OnAdLeavingApplication += RewardBasedVideoAd_OnAdLeavingApplication;
    
    RequestRewardVideo();
}

void RequestRewardVideo()
{       
	AdRequest request = new AdRequest.Builder().Build();
    rewardBasedVideoAd.LoadAd(request, adUnitID);
}

private void RewardBasedVideoAd_OnAdRewarded(object sender, Reward e)
{
	is보상 = true;
}

void Update()
{
	if(is보상)
    	보상진행내용;
}

 

출처: https://groups.google.com/forum/#!msg/google-admob-ads-sdk/hKJhOtSSus4/v-s2eH4cAgAJ

1. 게임 시작시 로딩화면을 띄워준다

2. 메인으로 사용하는 Scene SceneManager.LoadSceneAsync 불러온다.

    • LoadSceneAsync Scene 로딩을 비동기로 진행해준다.
    • LoadSceneAsync함수의 2번째 인자에 LoadSceneMode.Additive 넣어주면 현재 Scene 바로 닫지 않고 추가로 불러오게 된다.

이렇게 되면 현재 Scene에서는 로딩화면이나 애니메이션이 재생되어 플레이어는 로딩렉 현상을 느끼지 못하게 된다.3. 현재 Scene UnloadSceneAsync 이용하여 비동기로 종료해준다.

 

4. 불러온 메인 Scene Start함수에서 로딩화면을 비활성화 시켜준다.

 

[CurrentScene]

void Start()
{
	if(LoadingImage)
		LoadingImage.SetActive(true);

	StartCoroutine(SceneLoading());
}

IEnumerator SceneLoading()
{
	var mAsyncOperation = SceneManager.LoadSceneAsync("NextSceneName", LoadSceneMode.Additive);

	yield return mAsyncOperation;

	mAsyncOperation = SceneManager.UnloadSceneAsync("CurrentSceneName");

	yield return mAsyncOperation;
}

 

[NextScene]

void Start()
{
	if(LoadingImage)
		LoadingImage.SetActive(false);
}

기기의 언어설정

Application.systemLanguage

 

언어 enum 목록

Afrikaans

Afrikaans.

Arabic

Arabic.

Basque

Basque.

Belarusian

Belarusian.

Bulgarian

Bulgarian.

Catalan

Catalan.

Chinese

Chinese.

Czech

Czech.

Danish

Danish.

Dutch

Dutch.

등등

등등

 

 

사용

if(Application.systemLanguage == SystemLanguage.English)
{
	Debug.Log("Current Language is English");
}

else if(Application.systemLanguage == SystemLanguage.Korean)
{
	Debug.Log("현재 언어설정은 한국어 입니다.");
}

 

 

출처: https://docs.unity3d.com/ScriptReference/SystemLanguage.html

 

1.     Directional Light가 너무 많은지 확인

2.     Project Setting -> Quality -> Shadow Distance를 확인한다.(너무 낮으면 그림자가 안보인다)

 

 

StackOverflowException: The requested operation caused a stack overflow.

다양한 이유로 overflow가 나오게 된다.

 

1.     PropertyUpdate 문이나 연결된 함수 호출 부분에 조건(if, switch)으로 사용하게 되는 경우

문자열을 생성할 때 끝부분에 아래 문자열을 더하면 된다.

 

  • "\r\n"
  • System.Environment.NewLine

예제

string temp = null;
for(int i = 0; i < itemList.Count; ++i)
{
	// 1번
	temp += itemList[i] + "\r\n"; 
    
    // 2번
    temp += itemList[i] + System.Environment.NewLine;
}

Debug.Log(temp);

 

 

 

OnGUI를 이용하여 현재 FPS를 출력

 

    float DeltaTime = 0.0f;

    void Update()
    {
        DeltaTime += (Time.deltaTime - DeltaTime) * 0.1f;
    }

    void OnGUI()
    {
        float msec = DeltaTime * 1000.0f;
        float fps = 1.0f / DeltaTime;
        string text = string.Format("{0:0.0}ms, FPS: {1:0.}", msec, fps);

        GUI.Label(new Rect(0, 0, 200, 100), text);
    }

Canvas에 들어가는 UI 오브젝트들의 좌표를 정하려고 할 때
RectTransform에 접근하고 싶을 때가 있다.

일반적인

Object.GetComponent().position은 원하는 값으로 위치를 지정할 수 없다.

아래와 같이 

Object.GetComponent().anchoredPosition = new Vector2(x, y);

anchoredPosition을 이용하면 정확한 값을 지정할 수 있다.

+ Recent posts