728x90

CommandInvokationFailure: Gradle build failed. 
D:/Unity/UnityEditor/2019.4.1f1/Editor/Data/PlaybackEngines/AndroidPlayer\OpenJDK/bin\java.exe -classpath "D:\Unity\UnityEditor\2019.4.1f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-5.1.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "bundleRelease"

stderr[
error processing C:\Users\Shinirom\.gradle\caches\transforms-2\files-2.1\583a75497389cd684886f6ff612791df\jars\classes.jar


대강 이런 에러가 났다.

 

mainTemplate.gradle 파일이 

이런식으로 되어 있었다.

 

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

apply plugin: 'com.android.library'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    // Add additional dependencies here if needed
}

android {
    compileSdkVersion 30
    buildToolsVersion '30.0.3'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        minSdkVersion 30
        targetSdkVersion 32
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
        versionCode 1
        versionName '1.0'
        consumerProguardFiles 'proguard-unity.txt'
        multiDexEnabled true
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
    lintOptions {
        abortOnError false
    }

    aaptOptions {
        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
    }
}

내게 맞게 수정했다.

당연한걸 수정한거지만... 초반 에러의 원인은 이게 아니었을것임..


 

[ 빌드 에러 "각종" 해결 방법 ]
- 참고로 플러그인은 애드몹과 인앱결제만 사용.

- keystore 설정
- project setting > Player > Publishing Settings > Build 아래처럼 체크

- project setting > Player > Other Settings > Minimum API Level, Target API Level 수정
   -- 각 30, 32로 해둠.
- mainTemplate.gradle 파일에 multiDexEnabled true 이거랑 여러개 추가.(multiDex에러 검색하면 추가할거 여러개 나옴)

일단, 이정도.. 정리하면서 했어야 했는디..

 

 

 

 


 

 

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

증거와 진술로 추리해야 하는 게임!

방탈출 게임이 아닙니다.

증거는 모두 찾았고 용의자들에게 증언을 얻어내세요!

 

 

 

[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

728x90

 

using GoogleMobileAds.Api;
using UnityEngine;


public class AdMobManager : MonoBehaviour
{


    // These ad units are configured to always serve test ads.
#if UNITY_ANDROID
    private string _adUnitId = "ca-app-pub-3940256099942544/5224354917";
#elif UNITY_IPHONE
  private string _adUnitId = "ca-app-pub-3940256099942544/1712485313";
#else
  private string _adUnitId = "unused";
#endif

    public void Start()
    {
        // Google 모바일 광고 SDK를 초기화합니다.
        MobileAds.Initialize((InitializationStatus initStatus) =>
        {
            // 이 콜백은 MobileAds SDK가 초기화되면 호출됩니다.
            LoadRewardedAd();
        });
    }

    private RewardedAd rewardedAd;

    public void LoadRewardedAd()
    {
        // 새 광고를 로드하기 전에 이전 광고를 정리하십시오.
        if (rewardedAd != null)
        {
            rewardedAd.Destroy();
            rewardedAd = null;
        }

        Debug.Log("Loading the rewarded ad.");

        // 광고를 로드하는 데 사용되는 요청을 생성합니다.
        var adRequest = new AdRequest();
        adRequest.Keywords.Add("unity-admob-sample");

        // 광고 로드 요청을 보냅니다.
        RewardedAd.Load(_adUnitId, adRequest,
            (RewardedAd ad, LoadAdError error) =>
            {
                RegisterEventHandlers(ad);

                // 오류가 null이 아니면 로드 요청이 실패한 것입니다.
                if (error != null || ad == null)
                {
                    Debug.LogError("보상형 광고가 광고를 로드하지 못했습니다. " +
                                   "with error : " + error);
                    return;
                }

                Debug.Log("응답으로 로드된 보상형 광고 : " + ad.GetResponseInfo());

                rewardedAd = ad;
            });
    }

    public void ShowRewardedAd()
    {
        if (rewardedAd != null && rewardedAd.CanShowAd())
        {
            rewardedAd.Show((Reward reward) =>
            {
                // 보상 주는 곳.
                Debug.Log(" 보상 주는 곳 // " + reward.Type + " // " + reward.Amount);
            });
        }
    }

    // RewardedAd는 일회용 객체입니다. 즉, 보상형 광고가 표시된 후에는 객체를 다시 사용할 수 없습니다. 다른 보상형 광고를 요청하려면 새 RewardedAd 객체를 만들어야 합니다.
    // 다음 노출 기회에 맞게 보상형 광고를 준비하려면 OnAdFullScreenContentClosed 또는 OnAdFullScreenContentFailed 광고 이벤트가 발생한 후 보상형 광고를 미리 로드합니다.
    private void RegisterEventHandlers(RewardedAd ad)
    {
        // 광고에서 수익이 발생한 것으로 추정될 때 발생합니다.
        ad.OnAdPaid += (AdValue adValue) =>
        {
            Debug.Log("광고에서 수익이 발생한 것으로 추정될 때 발생합니다. " + adValue.Value + " // " + adValue.CurrencyCode);
        };
        // 광고에 대한 노출이 기록될 때 발생합니다.
        ad.OnAdImpressionRecorded += () =>
        {
            Debug.Log("광고에 대한 노출이 기록될 때 발생합니다.");
        };
        // 광고에 대한 클릭이 기록될 때 발생합니다.
        ad.OnAdClicked += () =>
        {
            Debug.Log("광고에 대한 클릭이 기록될 때 발생합니다.");
        };
        // 광고가 전체 화면 콘텐츠를 열 때 발생합니다.
        ad.OnAdFullScreenContentOpened += () =>
        {
            Debug.Log("광고가 전체 화면 콘텐츠를 열 때 발생합니다.");
        };
        // 광고가 전체 화면 콘텐츠를 닫을 때 발생합니다.
        ad.OnAdFullScreenContentClosed += () =>
        {
            Debug.Log("광고가 전체 화면 콘텐츠를 닫을 때 발생합니다.");
            // 다음 보상형 광고 미리 로드
            LoadRewardedAd();
        };
        // 광고가 전체 화면 콘텐츠를 열지 못했을 때 발생합니다.
        ad.OnAdFullScreenContentFailed += (AdError error) =>
        {
            Debug.LogError("광고가 전체 화면 콘텐츠를 열지 못했을 때 발생합니다." + " with error : " + error);
            // 다음 보상형 광고 미리 로드
            LoadRewardedAd();
        };
    }

}

 

728x90

 

문제: 애니메이션에 이벤트 키를 추가 해도 함수 인식을 못한다.

이벤트 키 추가
선택할 함수가 아무것도 나오지 않는다.

1. 내가 만든 함수를 연결할 거라면 스크립트가 연결되어 있는지 확인한다.
2. 기본 제공 함수도 보이지 않는다면 오브젝트에 해당 컴포넌트(Image라던가, Text 라던가..)가 추가되어 있는지 확인한다.

728x90

볼륨 10일때
볼륨 100일때

 

문제1 : 이미지의 크기를 늘이거나 줄일때 이미지가 눌리거나 늘어난다.
해결방법: 'sprite editor'를 이용한다.

1. project 창에서 이미지를 클릭한다.

 

2. Inspector창에서 Sprite Editor 버튼을 누른다.

 

3. 이미지를 줄이거나 늘려도 비율이 바뀌지 않을 부분을 정해준다.
- 초록색 선을 움직여 범위를 정하면된다.
- 범위를 정하지 않은 가운데 부분이 늘어나거나 줄어들게된다.
- 오른쪽 상단에 Apply를 눌러서 적용시킨다.

 

4. Image Type을 Sliced로 넣는다.

 

<결과1>

volume이 10일때
volume이 100일때

 


 

문제2 : 엄청 작거나 많이 크거나 하면 스프라이트 에디터에 적용한 것과 별개로 또 깨진다.
이유 : 텍스처(Texture)의 해상도와 스프라이트의 크기 사이에 불일치가 발생하기 때문이다.
해결 : 이를 해결하기 위해서는 크기를 조절할 때 텍스처의 해상도를 고려해야 한다.
1. 스프라이트의 크기를 변경할 때에는 텍스처 자체의 해상도를 변경하는 것이 아니라, 스프라이트가 참조하는 텍스처의 픽셀 밀도를 조정해야 한다.
2. 이는 텍스처의 'Pixels per Unit Multiplier' 값을 조절하는 것으로 해결했다.

1 -> 2.5 (내 경우에는 2.5가 적당)

 

<결과2>

volume이 10일때
volume이 100일때

 

 

 

 

 

 


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

증거와 진술로 추리해야 하는 게임!

방탈출 게임이 아닙니다.

증거는 모두 찾았고 용의자들에게 증언을 얻어내세요!

 

시즌2가 나왔습니다!

초동수사 1, 2 합본으로 출시했으니 기존 앱에서 에피소드를 확인해주세요😍

(안드로이드는 아직  시즌1만...)

 

 

 

[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

조건: 목록을 프리팹으로 만들었다. 목록 각 항목 안에 버튼이 있다.
목적: 목록 항목의 버튼을 누르면 목록 항목에 변화를 주고싶다.

 

1. 목록 프리팹을 만드는 컴포넌트를 SetActive(false), SetActive(true)
- 비활성화 후 다시 활성화 시키면 스크립트 사이클이 다시 시작되기때문에 목록을 다시 만든다. 

728x90

원하는 기능 : 애니메이션이 끝나고 n초 후에 다시 재생.
해결: 해결 방법은 많겠지만, 내가 선택한건 애니메이션 이벤트와 커스텀 함수를 이용했다.

  1. 애니메이션을 클릭해서 인스펙터창에 나온 Loop Time을 해제한다.

  1. 애니메이션이 끝나면 들어올 스크립트를 생성한다.
    // 변수 생성
    Animator anim;


    void Awake()
    {
        // 스크립트가 붙어있는 오브젝트에서 Animator 컴포넌트 가져오기.
        anim = GetComponent<Animator>();
    }

    // IEnumerator: 코루틴만의 반환형 인터페이스. (앞에 I가 붙는 것은 인터페이스라고 한다)
    // yield : 코루틴의 반환 키워드
    IEnumerator EndAnim(){
        // new Wait을 기입하고 자동완성 부분을 보면 유니티에서 제공하는 함수가 몇가지 있다. 
        // 그 중에 나는 5초 딜레이가 필요하기 때문에 아래와 같이 작성한다.
        yield return new WaitForSeconds(5f);

        // loop 를 걸어두지 않아서 멈추어있는 애니메이션을 다시 플레이.
        // DeadEnemy 0: 재생할 애니메이션 클립 이름
        // -1: 모든 레이어를 대상
        // 0f: 애니메이션의 시작 시간
        anim.Play("DeadEnemy 0", -1, 0f);
    }

 

  1. 애니메이션 오브젝트에 스크립트 연결
  2. 애니메이션 끝난 부분에, 이벤트를 걸어준다.
    ㄱ. 마우스를 드래그해서 하얀색 세로줄을 이벤트 걸어줄 위치해 놓는다.
    ㄴ. 왼쪽 북마크 모양을 눌러 이벤트를 걸어준다.
    ㄷ. 생성된 북마크(오른쪽 빨간 네모상자)를 클릭하면 오른쪽에 인스펙터창이 열린다.

 

  1. 내가 만든 함수를 선택한다. ( 주의할 점은 오브젝트에 위에 만든 스크립트를 넣어와야 EndAnim이 보인다.)

 

 

 

 


 

 

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

증거와 진술로 추리해야 하는 게임!

방탈출 게임이 아닙니다.

증거는 모두 찾았고 용의자들에게 증언을 얻어내세요!

 

시즌2가 나왔습니다!

초동수사 1, 2 합본으로 출시했으니 기존 앱에서 에피소드를 확인해주세요😍

(안드로이드는 아직 없슴둥...)

 

 

[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

< loomiloomi >('https://loomiloomi.tistory.com/'이하 'loomiloomi')은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다.

○ 이 개인정보처리방침은 2023년 1월 1부터 적용됩니다.

 

제1조(개인정보의 처리 목적)

< loomiloomi >('https://loomiloomi.tistory.com/'이하 'loomiloomi')은(는) 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.



제2조(개인정보의 처리 및 보유 기간)

 < loomiloomi >은(는) 법령에 따른 개인정보 보유·이용기간 또는 정보주체로부터 개인정보를 수집 시에 동의받은 개인정보 보유·이용기간 내에서 개인정보를 처리·보유합니다.

② 각각의 개인정보 처리 및 보유 기간은 다음과 같습니다.



제3조(처리하는 개인정보의 항목)

 < loomiloomi >은(는) 다음의 개인정보 항목을 처리하고 있습니다.



제4조(개인정보의 파기절차 및 파기방법)


① < loomiloomi > 은(는) 개인정보 보유기간의 경과, 처리목적 달성 등 개인정보가 불필요하게 되었을 때에는 지체없이 해당 개인정보를 파기합니다.

② 정보주체로부터 동의받은 개인정보 보유기간이 경과하거나 처리목적이 달성되었음에도 불구하고 다른 법령에 따라 개인정보를 계속 보존하여야 하는 경우에는, 해당 개인정보를 별도의 데이터베이스(DB)로 옮기거나 보관장소를 달리하여 보존합니다.
1. 법령 근거 :
2. 보존하는 개인정보 항목 : 계좌정보, 거래날짜

③ 개인정보 파기의 절차 및 방법은 다음과 같습니다.
1. 파기절차
< loomiloomi > 은(는) 파기 사유가 발생한 개인정보를 선정하고, < loomiloomi > 의 개인정보 보호책임자의 승인을 받아 개인정보를 파기합니다.

2. 파기방법

전자적 파일 형태의 정보는 기록을 재생할 수 없는 기술적 방법을 사용합니다.

종이에 출력된 개인정보는 분쇄기로 분쇄하거나 소각을 통하여 파기합니다

제5조(정보주체와 법정대리인의 권리·의무 및 그 행사방법에 관한 사항)



① 정보주체는 loomiloomi에 대해 언제든지 개인정보 열람·정정·삭제·처리정지 요구 등의 권리를 행사할 수 있습니다.

② 제1항에 따른 권리 행사는loomiloomi에 대해 「개인정보 보호법」 시행령 제41조제1항에 따라 서면, 전자우편, 모사전송(FAX) 등을 통하여 하실 수 있으며 loomiloomi은(는) 이에 대해 지체 없이 조치하겠습니다.

③ 제1항에 따른 권리 행사는 정보주체의 법정대리인이나 위임을 받은 자 등 대리인을 통하여 하실 수 있습니다.이 경우 “개인정보 처리 방법에 관한 고시(제2020-7호)” 별지 제11호 서식에 따른 위임장을 제출하셔야 합니다.

④ 개인정보 열람 및 처리정지 요구는 「개인정보 보호법」 제35조 제4항, 제37조 제2항에 의하여 정보주체의 권리가 제한 될 수 있습니다.

⑤ 개인정보의 정정 및 삭제 요구는 다른 법령에서 그 개인정보가 수집 대상으로 명시되어 있는 경우에는 그 삭제를 요구할 수 없습니다.

⑥ loomiloomi은(는) 정보주체 권리에 따른 열람의 요구, 정정·삭제의 요구, 처리정지의 요구 시 열람 등 요구를 한 자가 본인이거나 정당한 대리인인지를 확인합니다.



제6조(개인정보의 안전성 확보조치에 관한 사항)

< loomiloomi >은(는) 개인정보의 안전성 확보를 위해 다음과 같은 조치를 취하고 있습니다.

1. 개인정보 취급 직원의 최소화 및 교육
개인정보를 취급하는 직원을 지정하고 담당자에 한정시켜 최소화 하여 개인정보를 관리하는 대책을 시행하고 있습니다.



제7조(개인정보를 자동으로 수집하는 장치의 설치·운영 및 그 거부에 관한 사항)



loomiloomi 은(는) 정보주체의 이용정보를 저장하고 수시로 불러오는 ‘쿠키(cookie)’를 사용하지 않습니다.

제8조 (개인정보 보호책임자에 관한 사항)

 loomiloomi 은(는) 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.

  • ▶ 개인정보 보호책임자
  • 성명 :신이룸
  • 직책 :대표
  • 직급 :대표
  • 연락처 :010-5768-2494, tdf5335@naver.com,

※ 개인정보 보호 담당부서로 연결됩니다.

  • ▶ 개인정보 보호 담당부서
  • 부서명 :
  • 담당자 :
  • 연락처 :, ,

② 정보주체께서는 loomiloomi 의 서비스(또는 사업)을 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및 담당부서로 문의하실 수 있습니다. loomiloomi 은(는) 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다.

제9조(개인정보의 열람청구를 접수·처리하는 부서)
정보주체는 「개인정보 보호법」 제35조에 따른 개인정보의 열람 청구를 아래의 부서에 할 수 있습니다.
< loomiloomi >은(는) 정보주체의 개인정보 열람청구가 신속하게 처리되도록 노력하겠습니다.

  • ▶ 개인정보 열람청구 접수·처리 부서
  • 부서명 :
  • 담당자 :
  • 연락처 : , ,



제10조(정보주체의 권익침해에 대한 구제방법)



정보주체는 개인정보침해로 인한 구제를 받기 위하여 개인정보분쟁조정위원회, 한국인터넷진흥원 개인정보침해신고센터 등에 분쟁해결이나 상담 등을 신청할 수 있습니다. 이 밖에 기타 개인정보침해의 신고, 상담에 대하여는 아래의 기관에 문의하시기 바랍니다.

1. 개인정보분쟁조정위원회 : (국번없이) 1833-6972 (www.kopico.go.kr)
2. 개인정보침해신고센터 : (국번없이) 118 (privacy.kisa.or.kr)
3. 대검찰청 : (국번없이) 1301 (www.spo.go.kr)
4. 경찰청 : (국번없이) 182 (ecrm.cyber.go.kr)

「개인정보보호법」제35조(개인정보의 열람), 제36조(개인정보의 정정·삭제), 제37조(개인정보의 처리정지 등)의 규정에 의한 요구에 대 하여 공공기관의 장이 행한 처분 또는 부작위로 인하여 권리 또는 이익의 침해를 받은 자는 행정심판법이 정하는 바에 따라 행정심판을 청구할 수 있습니다.

※ 행정심판에 대해 자세한 사항은 중앙행정심판위원회(www.simpan.go.kr) 홈페이지를 참고하시기 바랍니다.

제11조(개인정보 처리방침 변경)

 

① 이 개인정보처리방침은 2023년 1월 1부터 적용됩니다.

② 이전의 개인정보 처리방침은 아래에서 확인하실 수 있습니다.

예시 ) - 20XX. X. X ~ 20XX. X. X 적용 (클릭)

예시 ) - 20XX. X. X ~ 20XX. X. X 적용 (클릭)

예시 ) - 20XX. X. X ~ 20XX. X. X 적용 (클릭)

728x90

문제점: 메소드 있는데, 자꾸 없다고 함. 

해결: 함수 제약조건.

  1. 함수명은 숫자로 시작할 수 없습니다.
  2. 대소문자를 구별합니다.
  3. 대문자로 시작하는 함수는 외부에서 불러올 수 있습니다.

 

getUserInfo 함수 정의시 앞글자를 소문자로 해서 일어난 문제. GetUserInfo로 바꾸니 잘 불ㄹ와짐.

 

ps: 이래서 기초가 중요하다...

+ Recent posts