블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2769)
Unity3D (838)
Programming (475)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (229)
협업 (10)
3DS Max (3)
Game (12)
Utility (69)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (52)
Android (15)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

MacOS 14.5

Unity 2021.3.40f1

Firebase 12.1.0

----

 

유니티 에디터에서 Play를 하려는데 아래와 같은 에러가 뜬다.

 

찾아보니 Mac 설정에서 체크해줘야 된다.

[설정 - 개인정보 보호 및 보안]에서 아래 빨간 네모박스 부분을 찾아서 [그래도 허용]을 눌러주자.

 

 

 

[참조] https://moongtaeng.net/wp/2022/01/02/4049/

 

Unity FirebaseCppApp-xxx.bundle 오류 – 뭉탱이의 까칠한 생활

신년을 맞이하여 구닥다리 프로젝트를 다시 오픈해서 각종 sdk 업데이트를 진행하였다. synology에 svn이 없어졌기에 git으로 갈아타고 각종 설정을 진행하는데, 유니티에서 갑작스레 오류팝업을 띄

moongtaeng.net

 

[참조] https://firebase.google.com/docs/unity/build-debug-guide?hl=ko

 

게임 빌드, 설치, 실행 프로세스 디버깅  |  Firebase for Unity

의견 보내기 게임 빌드, 설치, 실행 프로세스 디버깅 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 소개 다음은 Unity용 Firebase SDK를 사용하여 Unity 게임의 컴

firebase.google.com

 

반응형
Posted by blueasa
, |

[링크] https://drehzr.tistory.com/2194

 

Unity) Search Extension (검색 기능 확장하기)

Search Extension (검색 기능 확장하기)   프로젝트의 리소스의 종속성도 꽤나 잘 검색이 되는것으로 판단 된다.좀더 참고해서 작업할수 있지 않을까 고민하다가 간략하게 사용해보고 후기에 대

drehzr.tistory.com

 

반응형
Posted by blueasa
, |

[링크]

https://wlsdn629.tistory.com/entry/%EC%9C%A0%EB%8B%88%ED%8B%B0-%EA%B2%8C%EC%9E%84-%ED%99%94%EB%A9%B4-%EB%85%B9%ED%99%94%EC%98%81%EC%83%81%EC%B4%AC%EC%98%81%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

유니티 게임 화면 녹화(영상촬영)하는 방법

Recorder 임포트하기 Package Manager를 열어 Recorder를 찾아준 후 Install를 눌러 설치해줍니다. 설치가 끝나면 상단 [Window] - [General] 탭으로 들어가보면 Recorder가 생긴 것을 확인할 수 있습니다. 촬영하기

wlsdn629.tistory.com

 

반응형
Posted by blueasa
, |

Windows 10

Android Studio 2024.1.1

----

 

Android API(버전) 별 사용 정도를 알고 싶을때가 있는데, 의외로 쉬운 방법이 있어서 올려 둠

 

[Android API 별 점유율 확인 방법]

0. Android Studio 실행(없으면 설치 후 실행 : https://developer.android.com/studio)

1. New Project 클릭

2. Phone and Tablet 선택

3. Activity 아무거나 선택(New Proejct 창이 뜨면 기본적으로 Phone and Tablet - Empty Activity가 골라져 있음)

4. Next 클릭

 

5. Minimum SDK에 현재 기준 API 24가 선택 돼 있고, 아래에 해당 API 24로 선택 할 때, 적용 가능한 디바이스의 범위를 %로 보여줌.(현재 기준 97.4%)

 

6. API 24만의 %를 보고싶다면, API 23으로 선택해서 %를 보고 차이 값을 보면 된다.

    예) 현재 기준 API 23:98.8%이고, API 24:97.4%이기 때문에, API 23(Android 6.0)은 1.4%이다.

 

 

 

[참조] https://no-dev-nk.tistory.com/110

 

안드로이드 버전별 점유율 2024.4(업데이트)

이 글의 주제는 안드로이드 버전별 점유율의 상태에 대해서 작성하는 글인데요. 사실 한 철만 볼 수 있는 주제에 가까운데 왜 포스팅을 하느냐하면, 각 API 별로 분류를 해 볼까 해서입니다. 현

no-dev-nk.tistory.com

 

반응형
Posted by blueasa
, |

[링크] https://no-dev-nk.tistory.com/110

 

안드로이드 버전별 점유율 2024.4(업데이트)

이 글의 주제는 안드로이드 버전별 점유율의 상태에 대해서 작성하는 글인데요. 사실 한 철만 볼 수 있는 주제에 가까운데 왜 포스팅을 하느냐하면, 각 API 별로 분류를 해 볼까 해서입니다. 현

no-dev-nk.tistory.com

 

반응형
Posted by blueasa
, |

빌드환경 : Windows 10

Unity 2021.3.40f1

Firebase 11.9.0

GoogleMobileAds 9.1.0

AppsFlyer 6.14.4

----

 

구글에서 2024년 8월 31일까지 Target API 34로 올리라고 경고가 날라왔는데..

Unity 2021에서 Target API 34로 놓고 빌드하면 gradle 관련 빌드 실패가 뜬다.

유니티 엔진 자체 버그인데 다음 업데이트때까지 API 34로 빌드 할 수 있는 방법 3가지 임시방편을 유니티에서 보내줬다.(아래 파일 참조)

 

[Android] Target API Level 34 설정시 일부 Unity 2021.3 프로젝트에서 Gradle Build Fail 발생 관련 임시방편

202400701 - [Android Target API 34] Gradle Build Fail occurs in Unity 2021.3.pdf
0.20MB

 

 

3가지 중 원하는 방식 하나를 선택해서 진행하면 되는데,

나는 2번째 방식(2. AAPT2 7.2.2 사용)으로 진행했다.

 

위 문서를 봐도 되겠지만, 추가 수정도 필요해서 아래에 내가 진행한 순서를 정리해 둔다.

 

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

[AAPT2를 이용한 Android Target API 34 빌드를 위한 처리 순서]

1. Google’s Maven의 AAPT2에 접속
2. '빌드 환경'에 맞는 AAPT2 7.2.2 jar 파일 다운로드 (예: Windows)

      [빌드 환경 별 다운로드 링크] Windows / OSX / Linux

3. 적당한 위치에 압축 풀기

     예) C:/Android/aapt2/aapt2-7.2.2-7984345-windows

4. Edit - Project Settings - Player - Publishing Settings - Build -  Custom Gradle Properties Template - 박스 체크

5. ../Assets/Plugins/Android/gradleTemplate.properties 파일 오픈

6. gradleTemplate.properties에 android.aapt2FromMavenOverride 추가

     [참고] 폴더 구분에 쓰는 인자는 슬래시(/)를 쓰던지, 역슬래시 2개를 겹쳐서(\\) 쓰던지 선택

     예1) android.aapt2FromMavenOverride=C:/Android/aapt2/aapt2-7.2.2-7984345-windows/aapt2.exe

     예2) android.aapt2FromMavenOverride=C:\\Android\\aapt2\\aapt2-7.2.2-7984345-windows\\aapt2.exe

gradleTemplate.properties

7. Edit - Project Settings - Player - Other Settings - Identification

    7.1. Target API Level : API Level 34로 변경

    7.2. Minimum API Level : API Level 24로 변경

           (원래는 API Level 23이었는데 23으로 두고, Target API 34로 빌드하니 빌드에러가 난다. Minimum도 24로 올려야 되는 것 같다)

8. Build

 

 

[참조] https://forum.unity.com/threads/android-14-api-level-34-in-unity-2020-lts-and-2021-lts.1516538/

 

Question - Android 14 (API Level 34) in Unity 2020 LTS and 2021 LTS

Hi, Is Android 14 supported as a build target in Unity 2020 and 2021 ? I have tried building an empty project in Unity 2020.3.30f1 and Unity...

forum.unity.com

 

반응형
Posted by blueasa
, |

Unity 2021.3.40f1

I2 Localization v2.8.22 f4

----

I2 Localization의 AppName 로컬라이징을 사용하고 있는데,

PostProcessBuild_iOS.cs를 약간 개조(추가)해서 iOS Privacy도 로컬라이징 하도록 추가함.

(현재는 ATT 관련 Description인 NSUserTrackingUsageDescription Privacy를 추가함)

 

아래 소스를 I2 Localization 하위에 있는 PostProcessBuild_iOS.cs가 있는 폴더에 넣거나,

원하는 곳 Editor 폴더 아래에 넣으면 된다.

 

난 에셋 삭제 시 함께 사라지는 걸 방지하기 위해 아래 위치에 추가해 뒀다.

[소스 위치] ../Assets/I2_Extentions/Localization/Scripts/Editor/PostProcessBuild_iOS_Privacy.cs

 

#if UNITY_IOS || UNITY_IPHONE
using UnityEditor.Callbacks;
using System.Collections;
using UnityEditor.iOS_I2Loc.Xcode;
using System.IO;
using UnityEditor;
using UnityEngine;
using System.Linq;


namespace I2.Loc
{
    public class PostProcessBuild_IOS_Privacy
    {
        // PostProcessBuild_IOS(10000) 다음에 실행 되도록 10001로 지정함.
        [PostProcessBuild(10001)]
        public static void ChangeXcodePlist(BuildTarget buildTarget, string pathToBuiltProject)
        {
            if (buildTarget != BuildTarget.iOS)
                return;

			if (LocalizationManager.Sources.Count <= 0)
				LocalizationManager.UpdateSources();
            var langCodes = LocalizationManager.GetAllLanguagesCode(false).Concat(LocalizationManager.GetAllLanguagesCode(true)).Distinct().ToList();
            if (langCodes.Count <= 0)
				return;
				
            try
            {
			//----[ Export localized languages to the info.plist ]---------

                string plistPath = pathToBuiltProject + "/Info.plist";
                PlistDocument plist = new PlistDocument();
                plist.ReadFromString(File.ReadAllText(plistPath));

				PlistElementDict rootDict = plist.root;

                // Get Language root
                var langArray = rootDict.CreateArray("CFBundleLocalizations");

                // Set the Language Codes
                foreach (var code in langCodes)
                {
                    if (code == null || code.Length < 2)
                        continue;
                    langArray.AddString(code);
                }

				rootDict.SetString("CFBundleDevelopmentRegion", langCodes[0]);

                // Write to file
                File.WriteAllText(plistPath, plist.WriteToString());

			//--[ Localize Privacy ]----------

				string LocalizationRoot = pathToBuiltProject + "/I2Localization";
				if (!Directory.Exists(LocalizationRoot))
					Directory.CreateDirectory(LocalizationRoot);
				
				var project = new PBXProject();
				string projPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
				//if (!projPath.EndsWith("xcodeproj"))
					//projPath = projPath.Substring(0, projPath.LastIndexOfAny("/\\".ToCharArray()));

				project.ReadFromFile(projPath);
				//var targetName = PBXProject.GetUnityTargetName();
				//string projBuild = project.TargetGuidByName( targetName );

                // 상위(PostProcessBuild_IOS.cs)에서 이미 지우고 생성했기 때문에 주석처리.
				//project.RemoveLocalizationVariantGroup("I2 Localization");
				
                // Set the Language Overrides
				foreach (var code in langCodes)
				{
					if (code == null || code.Length < 2)
						continue;

					var LanguageDirRoot = LocalizationRoot + "/" + code + ".lproj";
					if (!Directory.Exists(LanguageDirRoot))
						Directory.CreateDirectory(LanguageDirRoot);

					var infoPlistPath = LanguageDirRoot + "/InfoPlist.strings";
                    
                    // AppName
                    //var InfoPlist = string.Format("CFBundleDisplayName = \"{0}\";", LocalizationManager.GetAppName(code));
                    //File.WriteAllText(infoPlistPath, InfoPlist);
                    
                    // Privacy - NSUserTrackingUsageDescription
                    // 다른 Privacy 필요하면 아래 추가하면 됨.
                    var InfoPlist = string.Format("\n{0} = \"{1}\";", "NSUserTrackingUsageDescription", Get_NSUserTrackingUsageDescription(code));
                    File.AppendAllText(infoPlistPath, InfoPlist);


                    //var langProjectRoot = "I2Localization/"+code+".lproj";

                    // InfoPlist.strings만 수정할거라 Localizable.strings는 주석처리.
                    //var stringPaths = LanguageDirRoot + "/Localizable.strings";
                    //File.WriteAllText(stringPaths, string.Empty);

                    // AddLocalization은 PostProcessBuild_IOS.cs에서 했기 때문에 주석처리 함.
                    //project.AddLocalization(langProjectRoot + "/Localizable.strings", langProjectRoot + "/Localizable.strings", "I2 Localization");
                    //project.AddLocalization(langProjectRoot + "/InfoPlist.strings", langProjectRoot + "/InfoPlist.strings", "I2 Localization");
                }

                project.WriteToFile(projPath);
				
            }
            catch (System.Exception e)
            { 
				Debug.Log (e);
			}
        }

        /// <summary>
        /// NSUserTrackingUsageDescription(IDFA/ATT)
        /// </summary>
        /// <param name="_code">국가코드</param>
        /// <returns>로컬라이징 된 Description</returns>
		private static string Get_NSUserTrackingUsageDescription(string _code)
		{
			string strDescription = string.Empty;

			switch(_code)
			{
								case "en":
					strDescription = "This identifier will be used to deliver personalized ads to you.";
					break;

                case "ko":
                    strDescription = "이 식별자는 맞춤형 광고를 제공하는 데 사용됩니다.";
                    break;

                case "zh":      // zh도 zh-CN(중국본토)으로 보도록 함
                case "zh-CN":
                    strDescription = "该标识符将用于向您投放个性化广告。";
                    break;

                case "zh-TW":
                    strDescription = "該標識符將用於向您投放個人化廣告。";
                    break;

                case "ja":
                    strDescription = "この識別子は、パーソナライズされた広告を配信するために使用されます。";
                    break;

                case "vi":
                    strDescription = "Mã nhận dạng này sẽ được sử dụng để phân phối quảng cáo được cá nhân hóa cho bạn.";
                    break;

                case "es":
                    strDescription = "Este identificador se utilizará para enviarle anuncios personalizados.";
                    break;

                case "it":
                    strDescription = "Questo identificatore verrà utilizzato per fornirti annunci personalizzati.";
                    break;

                case "id":
                    strDescription = "Pengenal ini akan digunakan untuk menayangkan iklan yang dipersonalisasi kepada Anda.";
                    break;

                case "th":
                    strDescription = "ตัวระบุนี้จะใช้ในการส่งโฆษณาส่วนบุคคลให้กับคุณ";
                    break;

                case "pt":
                    strDescription = "Este identificador será utilizado para lhe entregar anúncios personalizados.";
                    break;

                case "hi":
                    strDescription = "इस पहचानकर्ता का उपयोग आपको वैयक्तिकृत विज्ञापन देने के लिए किया जाएगा.";
                    break;

                default:
                    strDescription = "This identifier will be used to deliver personalized ads to you.";
                    break;
			}

			return strDescription;

        }
    }
}
#endif
반응형
Posted by blueasa
, |

[링크]

https://velog.io/@maratangsoft/Android%EC%99%80-Unity-%EA%B0%84-Gradle-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC

 

Android와 Unity 간 버전 호환성 관리

유니티 에디터로 만든 안드로이드 앱에 안드로이드 라이브러리 통합시

velog.io

 

반응형
Posted by blueasa
, |

[링크] https://mastmanban.tistory.com/516

 

4개의 분할창 탐색기 Q-Dir 드디어 탭기능 지원

전 윈도우를 사용하면서 윈도우 기본 탐색기를 거의 사용하지 않습니다. 요즘 거의 대부분이 탭 기능을 가진 프로그램들이 많기 때문에 윈도우 기본 탐색기를 사용하면 작업표시줄에 너무나 많

mastmanban.tistory.com

 

반응형
Posted by blueasa
, |

[링크] https://mastmanban.tistory.com/920

 

윈도우 탐색기 확장으로 탭 기능 추가하는 QTTabBar

윈도우를 사용하면서 가장 많이 사용하고 반드시 쓰는 프로그램이 탐색기 입니다. 하지만 윈도우 기본 탐색기를 그냥 쓰기에는 부족한 부분이 있습니다. 윈도우 기본 탐색기를 사용하면서 가장

mastmanban.tistory.com

 

반응형
Posted by blueasa
, |