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

카테고리

분류 전체보기 (2735)
Unity3D (815)
Script (91)
Extensions (14)
Effect (3)
NGUI (77)
UGUI (8)
Physics (2)
Shader (36)
Math (1)
Design Pattern (2)
Xml (1)
Tips (200)
Link (22)
World (1)
AssetBundle (25)
Mecanim (2)
Plugins (68)
Trouble Shooting (68)
Encrypt (7)
LightMap (4)
Shadow (4)
Editor (8)
Crash Report (3)
Utility (9)
UnityVS (2)
Facebook SDK (2)
iTween (3)
Font (11)
Ad (14)
Photon (2)
IAP (1)
Google (8)
Android (45)
iOS (41)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (58)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (53)
Android (14)
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
04-16 09:10

Unity 2021.3.16f1

Xcode 14.2

Firebase 10.4.0

 

----

[빌드에러]

pod install output:



Analyzing dependencies

[!] CocoaPods could not find compatible versions for pod "GTMSessionFetcher/Core":

  In Podfile:

    Firebase/Auth (= 10.4.0) was resolved to 10.4.0, which depends on

      FirebaseAuth (~> 10.4.0) was resolved to 10.4.0, which depends on

        GTMSessionFetcher/Core (< 4.0, >= 2.1)

 

최근 Firebase 10.x 버전이 Xcode 14.x 버전에서 위와 같은 오류를 내면서 빌드가 제대로 되지 않는 문제가 있어서 이리저리 알아보니 구글에서 확인하고 수정중이라고 하는 것 같다.

[참조] https://github.com/firebase/firebase-ios-sdk/issues/10359

 

GTMSessionFetcher/Core dependency conflict between Firebase/Auth and GoogleMLKit/LanguageID with Firebase 10.0.0 · Issue #10359

Description Attempting a pod update causes Firebase/Analytics and Auth to be downgraded from 9.6.0 to 3.6.0, and GoogleUtilities from 7.8.0 to 1.3.2 leading to a compile error related to a GoogleUt...

github.com

 

수정 전까지 대안으로 아래와 같이 Podfile에서 FirebaseAuth 버전을 내리라고 설명하고 있다.

유니티를 사용중이라서 Podfile을 만지는건 애매하고, Firebase의 AuthDependencies.xml 파일에서 수정해보기로 했다.

 

<iosPod name="Firebase/Auth" version="10.4.0" minTargetSdk="8.0"></iosPod>

위의 내용을 아래와 같이 수정했다.

<iosPod name="Firebase/Auth" version="~> 9.6.0" minTargetSdk="8.0"></iosPod>

 

그래서 FirebaseAuth는 사라졌는데..

 

Messaging 쪽 에러가 다시 나오면서 빌드 실패.

[에러메시지]

pod install output:



Analyzing dependencies

[!] CocoaPods could not find compatible versions for pod "Firebase/Messaging":

  In Podfile:

    Firebase/Messaging (= 10.4.0)



None of your spec sources contain a spec satisfying the dependency: `Firebase/Messaging (= 10.4.0)`.

 

[결론]

그냥 고쳐질 때까지 Firebase 9.6.0을 써야 될 것 같다..

 

 

반응형
Posted by blueasa
, |

Unity 2021.3.16f1

External Dependency Manager 1.2.175

 

이번에 External Dependency Manager를 버전업 하게 돼서 생각없이 업데이트 했는데

아래와 같이 사용안하는 파일 삭제 할거냐고 묻는 창이 떴다.

 

잘 사용하고 있기도 하고, 위의 창에서 Cancel을 해도 컴파일 될 때 마다 계속 위의 창이 떠서 문제였는데,

짜증나게도 왜 삭제해야 되는지 왜 obsolete로 잡히는 지 설명이 없다.

 

신기한 건 해당 프로젝트에서는 이 창이 뜨는데, 다른 프로젝트에 같은 스크립트가 있는데도 창이 뜨지 않는다.

 

[해결]

이런저런 삽질하다가 혹시나해서 파일을 삭제하고 컴파일 되게 한 후에,

다시 같은 파일을 같은 위치에 넣으니 정상적으로 적용되고 위의 창이 뜨지 않는다.

 

예상되는 이유는

External Dependency Manager가 새로 설치되면서 위의 스크립트가 무언가의 이유?오류?로 유니티 프로젝트에서 사용안한다고 판단하고 프로젝트에서 사용안하니 삭제 할거냐고 계속 묻게 된 것 같다.

그리고, 삭제 후 다시 추가하면서 정상적으로 External Dependency Manager의 Google Version Handler에 제대로 인식되고 위의 창이 이제 안뜨는 것 같다.

 

[결론]

Version Handler가 인식못해서 계속 삭제하라고 하는 것 같으니

프로젝트에서 삭제했다가 다시 추가하자.

반응형
Posted by blueasa
, |

Unity 2021.3.16f1

External Dependency Manager 1.2.175

GoogleMobileAds 7.4.0

 

[빌드에러]

...

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':launcher:dexBuilderRelease'.
> java.lang.UnsupportedOperationException: This feature requires ASM7

...

 

[해결]

gradle 버전이 낮아서 생기는 문제라고 한다.

Android 11이슈로 쓰던 gradle 버전이 com.android.tools.build:gradle:3.4.3 이었는데,

Unity 2021.3.16f1 기준 기본 버전이 com.android.tools.build:gradle:4.0.1 이어서 해당 버전을 사용하니 빌드가 잘된다.

다시 해보니 Unity 2021.3.16f1 기본 버전인 com.android.tools.build:gradle:4.0.1 이 빌드가 제대로 안돼서,

com.android.tools.build:gradle:4.0.1+로 수정하고 나서 제대로 되는 걸 확인했다.

(GoogleMobileAds 7.4.0이 gradle 4.0.1에서 에러나는걸로 봐서는 상위 버전 뭔가를 쓰는 것 같은데 무슨 버전을 쓰는지 모르겠어서 +를 붙였음)

 

[주의]

gradle 버전을 해당 Unity 엔진이 가지고 있는 버전보다 높게 올리면 아래와 같은 에러를 보게 된다.

지정한 gradle 버전을 사용하려면 맞는 gradle 플러그인 버전을 받아서 해당 위치에 넣어주거나,

현재 Unity 엔진이 가지고 있는 버전에 맞추거나 하자.

(난 받기 귀찮기도 하고, 협업을 하려면 다른 곳도 설치해줘야 되는 문제들로 인해서

  현재 Unity 버전이 지원하는(gradle 4.0.1) 걸로 셋팅 함)

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\Project\git\GuitarGirl\Library\Bee\Android\Prj\IL2CPP\Gradle\launcher\build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':launcher'.
> Failed to apply plugin [id 'com.android.internal.version-check']
   > Minimum supported Gradle version is 6.5. Current version is 6.1.1. If using the gradle wrapper, try editing the distributionUrl in C:\Project\git\GuitarGirl\Library\Bee\Android\Prj\IL2CPP\Gradle\gradle\wrapper\gradle-wrapper.properties to gradle-6.5-all.zip

 

[참고] https://stackoverflow.com/questions/68709559/nestmember-requires-asm7

 

NestMember requires ASM7

After update to Java 11 got an error in Android Studio by ./gradlew lintFooDebug command. * What went wrong: Execution failed for task ‘foo:syncDebugLibJars'. > NestMember requires ASM7 • Ran ./

stackoverflow.com

 

[gradle version 변경하기] https://blueasa.tistory.com/2703

 

[링크] Unity - Android Gradle Version 변경하기

[링크] https://drehzr.tistory.com/1022 Unity)Android Gradle Version Change Unity Android Gradle Version Change Unity 에서 Android의 Gradle의 버전을 변경을 해야하는 경우가 생겨서 이렇게 포스팅하게 되었다. Project Setting 의

blueasa.tistory.com

 

[gradle cache 삭제하기] https://happyryu.tistory.com/138

 

유니티 CommandInvokationFailure 해결방법

혹시나 이런 에러가 뜬다면? 아놔 참내.. 대빠 짜증나네요. 열나게 찾아보다가 유니티 버젼업도 해보고 Admob plugin 다시 지웠다가 깔았따 삽질하다가 드디어 찾았습니다. C:\Users\[윈도우계정 폴더]

happyryu.tistory.com

 

반응형
Posted by blueasa
, |

[사용엔진] Unity 2021.3.14f1

 

유니티 내장 VideoPlayer를 사용해서 Local 파일 로드를 할 때, 예전부터 Path 앞에 file:// 를 붙여서 사용했었는데 

이번에 URL을 그대로 사용하고 VideoPlayer로 동영상을 플레이 했는데

이전 폰들은 잘 나오는데 Android 12에서 제목과 같은 에러가 나면서 동영상 플레이가 안된다.

 

확인해보니 URL에서 file:// 을 빼라고 한다.

(Android 12 미만에서도 빼고 플레이 해보니 잘 된다.)

 

P.s. VideoPlayer는 file:// 빼야 되고, Assetbundle은 여전히 file:// 있어야 되는 것 같다.

 

[참조] 

We support webm across all platforms, but I am unsure about vp8 files. Something you should try is removing the files:// from the path and making sure the file is where you think it is. I saw someone else having the same issue https://stackoverflow.com/questions...error-ndkmediaextractor-cant-create-http-serv

 

[출처]

https://forum.unity.com/threads/videoplayer-url-issue-with-vp8-webm-on-android-androidvideomedia-error-opening-extractor-10002.1255434/

 

Bug - VideoPlayer.url issue with vp8/webm on Android: AndroidVideoMedia: Error opening extractor: -10002

I try to play a vp8 video on an Android device (Galaxy S10e, Android 12) using VideoPlayer.url with a file URI. For example: videoPlayer.url =...

forum.unity.com

 

반응형
Posted by blueasa
, |

[에러메시지]

NullReferenceException: Object reference not set to an instance of an object.

  at System.Linq.Expressions.Interpreter.LightLambda.MakeRunDelegateCtor (System.Type delegateType) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Linq.Expressions.Interpreter.LightLambda.GetRunDelegateCtor (System.Type delegateType) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Linq.Expressions.Interpreter.LightDelegateCreator.CreateDelegate () [0x00000] in <00000000000000000000000000000000>:0 

  at System.Linq.Expressions.Expression`1[TDelegate].Compile (System.Boolean preferInterpretation) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Runtime.CompilerServices.CallSite`1[T].MakeUpdateDelegate () [0x00000] in <00000000000000000000000000000000>:0 

  at System.Runtime.CompilerServices.CallSite`1[T].GetUpdateDelegate (T& addr) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Runtime.CompilerServices.CallSite`1[T]..ctor (System.Runtime.CompilerServices.CallSiteBinder binder) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Runtime.CompilerServices.CallSite`1[T].Create (System.Runtime.CompilerServices.CallSiteBinder binder) [0x00000] in <00000000000000000000000000000000>:0 

 

대충 위와같은 에러가 나는데..

유니티에서 dynamic을 쓰면 나는 에러인데..

결론은 유니티는 dynamic을 지원하지 않는다. 쓰지말자.

 

에디터에서는 잘되길래 될 줄 알았더만, 안드로이드 빌드해보니 위와같은 에러가 난다.

해결책이 별시리 없는듯하다.

 

[참조] https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=53076 

 

유니티 dynamic 못씀? - 인디 게임 개발 마이너 갤러리

분명 유니티 내에서 빌드 안하고 돌리면 잘만 돌아가는데, 빌드된 거 실행해보면 코드에서 에러가 계속 발생함NullReferenceException: Object reference not set to an instanc

gall.dcinside.com

[참조] https://issuetracker.unity3d.com/issues/il2cpp-notsupportedexceptions-exception-is-thrown-in-build-with-newtonsoft-dot-json-plugin

 

Unity IssueTracker - [IL2CPP] NotSupportedExceptions exception is thrown in build with Newtonsoft.Json plugin

Steps to reproduce: 1. Download attached project 2. Build standalone project on IL2CPP backend 3. Launch build project 4. Notice exc...

issuetracker.unity3d.com

 

반응형
Posted by blueasa
, |

[링크] https://lunchballer.com/archives/1326

 

[Unity-C#] 특정 국가에서 크래시가 난다면 CultureInfo를 확인하자

Unity 2019부터 .NET 3.5는 더 이상 지원되지 않고, .NET Standard 2.0과 .NET 4.X가 지원된다. .NET Standard 2.0/.NET 4.X은 Unity 2017까지 사용하던 .NET 2.0/.NET 2.0 Subset과 같지 않다. 그래서 글로벌 게임을 서비스 중

lunchballer.com

 

[참조] https://mentum.tistory.com/615

 

Float.Parse not in a correct format 문화권 문제

숫자 변환에서 오류가 발생하다 게임 개발을 하다 보면 string에서 float로 파싱 하여 사용해야 하는 경우가 꽤나 자주 발생한다. 예를 들어, 연출 데이터에서 0.5초 동안 정지한다거나 하는 경우 다

mentum.tistory.com

 

[체크해야 될 함수] 더 있을수도..

float.Parse / float.TryParse / float.ToString

double.Parse / double.TryParse / double.ToString

int.Parse / int.TryParse / int.ToString

long.Parse / long.TryParse / long.ToString

BigInteger.Parse / BigInteger.TryParse  / BigInteger.ToString

DateTime.Parse / DateTime.ParseExact / DateTime.TryParse / DateTime.TryParseExact / DateTime.ToString

TypeConverter.ConvertFrom / TypeConverter.ConvertTo

Convert.To??? 시리즈(Convert.ToInt16/ToInt32/ToInt64/ToUInt16/ToUInt32/ToUInt64,ToDecimal,ToDouble,ToSByte,ToSingle 등)

.ToLower / .ToUpper

string.Format

 

 

[첨언]

Unity 2018에서 Unity 2021로 포팅을 하고 업데이트를 했는데 이상한 에러가 크래시레포트에 많이 수집돼서 확인해보니

위의 링크에 보이는 문제로 보인다.

Unity 2019 부터 바뀐부분이 있어서(참조 링크 보면 됨) int float double BigInteger 등을 Parse 할 때 System.Globalization.CultureInfo.InvariantCulture을 무조건 넣어줘야 될 것 같다.

(CurrnetCulture는 건들면 문제가 생길 것 같아서 그냥 노가다로 다 넣었다.)

 

P.s. 문화권 문제라 한국에서는 아무리 테스트를 해도 크래시가 안나니 무슨 버그인지 몰라서 한참 헤멤..

 

[추가]

CultureInfo 관련 이슈가 있는 함수가 더 있어서 추가해 둠.

아래 함수 2개를 문화권 영향받지 않도록 변경했다.

이 두 함수는 함수 자체가 문화권 영향받지 않는 함수가 있어서 편한 것 같다.

 

TypeConverter.ConvertFrom() → TypeConverter.ConvertFromInvariantString()

TypeConverter.ConvertTo() → TypeConverter.ConvertToInvariantString()

 

[참고] https://learn.microsoft.com/ko-kr/dotnet/api/system.componentmodel.int32converter?view=net-7.0 

 

Int32Converter 클래스 (System.ComponentModel)

32비트 부호 있는 정수 개체와 다른 표현 사이를 변환하는 형식 변환기를 제공합니다.

learn.microsoft.com

 

[나라별 숫자표기 참고] https://theqoo.net/square/298509638

 

나라별로 다른 소수점과 천의 자리 구분 기호 - 스퀘어 카테고리

형태국가1,234,567.89호주, 캐나다 (영어권, 비공식), 중국, 홍콩, 아일랜드, 이스라엘, 일본, 한국, 말레이시아, 멕시코, 뉴질랜드, 파키스탄, 필리핀, 싱가포르, 대만, 태국, 영국, 미국1234567.89국제단

theqoo.net

[숫자표기 참고2] https://docs.oracle.com/cd/E19683-01/816-3980/overview-48/index.html

 

숫자 (국제 언어 환경 설명서)

숫자 영국과 미국은 소수 자릿수를 마침표를 사용해 표시하는 몇 안 되는 국가들 중 두 국가입니다. 그 밖의 많은 국가들은 마침표 대신 콤마를 사용합니다. 소수 구분 기호는 기수 문자라고도

docs.oracle.com

 

[Date format by country] https://gist.github.com/mlconnor/1887156

 

Listing of countries with their preferred date formats, ISO3166 code, ISO629-2

Listing of countries with their preferred date formats, ISO3166 code, ISO629-2 - country_date_formats.csv

gist.github.com

 

 

반응형
Posted by blueasa
, |

Unity 2021.3.11f1

I2 Localization(app_name 로컬라이징 용도)

 

I2 Localization 에셋으로 app_name Localization을 하고 있었는데,

Unity 2021.3.11f1으로 업데이트 한 후에 Android에서 로컬라이징이 되지 않고 기본 설정된 App Name만 나오는 문제가 생겼다.

(대충 검색해보니 Unity 2021.3부터 나오는 이슈 같다)

 

그래서 생성된 res 폴더를 ../Assets/Plugins/Android/ 하위에 직접 넣고 빌드해보니 아래와 같은 에러가 나온다.

 

Exception: OBSOLETE - Providing Android resources in Assets/Plugins/Android/res was removed, please move your resources to an AAR or an Android Library. See "AAR plug-ins and Android Libraries" section of the Manual for more details.
UnityEditor.Android.PostProcessor.Tasks.CheckUserResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.Android.PostProcessAndroidPlayer.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTarget target) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.Android.AndroidBuildPostprocessor.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTarget target) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.PostprocessBuildPlayer.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target) (at <4e64905d831f4883a53259ef37fb023b>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)

app_name 로컬라이징에 사용되던 /res/ 폴더 하위에 넣는 방식을 Unity 2021.3 이후에는 더이상 지원하지 않나보다.

 

그래서 검색해보니 아래 링크에 해결방법이 적혀있다.

 

[링크] https://develop.hateblo.jp/entry/android-res-error

 

【Unity】Androidのresフォルダがビルドエラーになる場合の対処法 - AppSeedのアプリ開発ブログ

最近、Unityを2021.3.9f1にアップデートしたのですが、Assets/Plugin/Android/res に配置していたフォルダの部分で下記のようなエラーが出るようになってしまいました。今回はこの対処法についてメ

develop.hateblo.jp

해결방법은 링크의 res.androidlib 폴더를 만드는 방법을 참조하면 된다.

링크의 xml 파일등이 띄어쓰기등이 좀 문제 있어서 겸사겸사 간단히 요약해서 적어 둠.

 

  [해결방법]

1. ../Assets/Plugins/Android/ 하위에 res.androidlib 폴더 생성

 

2. res.androidlib 폴더에 아래 파일을 다운받아서 추가하거나 AndroidManifest.xml 파일 직접 생성해서 입력

AndroidManifest.xml
0.00MB

[참조] AndroidManifest.xml 파일 내용

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="custom.android.res" android:versionCode="1" android:versionName="1.0">
</manifest>

 

2. res.androidlib 폴더에 아래 파일을 다운받아서 추가하거나 project.properties 파일 직접 생성해서 입력

project.properties
0.00MB

 

[참조] project.properties 파일 내용

target=android-9
android.library=true

 

3. 기존에 있던 res 폴더(하위에 values/values-en/values-ko 등 포함)를 res.androidlib 폴더로 이동

 

4. 위의 순서 진행하면 아래와 같이 된다.

res.androidlib 폴더
res 폴더(default 포함, 내가쓰는 언어들)

 

5. 이제 빌드 하면.. 된다!!

 

 

[참조] [Unity] 안드로이드 국가별 앱 이름 변경

 

[Unity] 안드로이드 국가별 앱 이름 변경

안녕하세요. 안드로이드 폰에 앱을 설치를 하면, Product Name으로 설정해놓은 이름으로 앱이 설치가 됩니다. 오늘은 앱 이름을 국가별로 다르게 설정하는 법에 대해 다루겠습니다. 일단 Assets\Plugins

scvtwo.tistory.com

[참조] Unity Android 빌드 후 국가별(언어별) 앱 이름 대응

 

Unity Android 빌드 후 국가별(언어별) 앱 이름 대응

Project Settings에서 Product Name을 이용하여 앱 이름을 설정할 수 있지만 이 경우 추후 google 및 apple에 등록한 뒤 변경이 어려운 경우가 분명 생기기 마련이고 (분명 다른 이유로라도 뭐 서버라든지 하

young-94.tistory.com

 

반응형
Posted by blueasa
, |

[사용엔진] Unity 2020.3.37f1

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

[추가]

Push 관련해서 같은 에러가 나서 확인해보니 아래 링크와 같은 처리를 요구하고 있다.

 

1. Android 12 이상에 대해서 PendingIntent 를 PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE 추가

2. AndroidManifest.xml  SCHEDULE_EXACT_ALARM 퍼미션 추가

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />

>> 1.2. 둘다 처리가 필요할 듯 하다.

 

 

[참조] https://github.com/radishmedia/react-native-push-notification/pull/19

 

fix: fix for not receiving notification on android 12 by tjkang · Pull Request #19 · radishmedia/react-native-push-notificatio

Description 안드로이드에서 sdk version 을 31 로 업그레이드하고 compileSdkVersion = 31 targetSdkVersion = 31 notification 이 수신이 안되는 이슈입니다 이는 안드로이드 12 이상에 대해서 PendingIntent 를 PendingIntent.F

github.com

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

 

구글에서 API 31을 쓰라고 해서 Target API를 31로 올리고 빌드 했는데,

실행은 되지만 최신 폰(좀 안좋은 폰은 정상)에서 실행 중 아래와 같은 에러메시지를 띄우면서 크래시가 남.

----

AndroidJavaException: java.lang.IllegalArgumentException: com.xxx.xxx.xxx: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
    Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
    java.lang.IllegalArgumentException: com.xxx.xxx.xxx: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
    Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.

----

이리저리 찾아보니 크게 2가지 처리를 하는 것 같다.

1. AndroidManifest.xml에 exported 명시적으로 설정

2. gradle의 dependencies {}에 androidx.work:work-runtime:2.7.0 라이브러리 추가(for Java)

    - 2.7.0부터 Android 12(API31)대응을 해서 2.7.0이상을 추가하면 되는 듯

    - Unity는 mainTemplate.gradle의 dependencies {...}에 추가

    - 라이브러리 선택 사항

       = [Java] implementation 'androidx.work:work-runtime:2.7.0'  // for Unity

       = [Kotlin] implementation 'androidx.work:work-runtime-ktx:2.7.0

 

 

내 경우는 exported 관련은 이미 돼 있어서 아래와 같이 androidx.work:work-runtime:2.7.1(현재 기준 공식 최신버전)을 추가하고 해결 했다.

mainTemplete.gradle

    dependencies{

    ....

    implementation 'androidx.work:work-runtime:2.7.1'    // for Java

    ....

    }

 

[참조] https://textbox.tistory.com/entry/android-%EC%8B%A4%ED%96%89%EC%98%A4%EB%A5%98-version-31%EC%97%90%EC%84%9C-%EC%95%B1-%EC%8B%A4%ED%96%89%EC%8B%9C-%EC%98%A4%EB%A5%98

[참조] https://bacassf.tistory.com/166

[참조] https://onlyfor-me-blog.tistory.com/467

[참조] https://stackoverflow.com/questions/68228666/targeting-s-version-10000-and-above-requires-that-one-of-flag-immutable-or-fl

반응형
Posted by blueasa
, |

[에러 내용]

  • 기기에서 앱을 실행하면 'dyld: Library not loaded: @rpath/FBAudienceNetwork.framework' 오류와 함께 바로 중단됩니다. 이 오류는 앱에 Audience Network SDK를 포함하지 않았다는 것을 의미합니다. 타겟 설정으로 이동하고 '일반' 탭에서 'FBAudienceNetwork.xcframework'에 '포함 및 서명'을 선택하세요.

 

[해결방법]

출처 링크의 내용에서는 Xcode에서 처리하는 방법을 써놨는데, 유니티 사용하는 상황에서 추가 작업을 Xcode에서 하면 귀찮아져서 Xcode PostProcessor에서 아래 소스 추가함.

[추가한 소스코드] pbxProject.AddFrameworkToProject(targetGuid, "FBAudienceNetwork.framework", true);

 

 

[출처] https://developers.facebook.com/docs/audience-network/setting-up/platform-setup/ios/add-sdk?locale=ko_KR

 

SDK 추가 - Audience Network - 문서 - Facebook for Developers

SDK 버전 6.9.0 이상에 대한 문제 해결 6.9.0부터는 iOS Audience Network SDK에서 Swift를 지원합니다. SDK 설치 및 Swift 상호운용성과 관련하여 가장 일반적으로 발생하는 문제를 해결하려면 아래의 내용을

developers.facebook.com

 

반응형
Posted by blueasa
, |

[문제]

캐릭터가 카메라에 가까이 있어서 캐릭터의 일부만 보일 때, 손 등 일부가 렌더링이 되지 않음.

 

[원인]

캐릭터의 일부(손) 기본 자세 Bound가 카메라 밖에 있어서 카메라 안쪽에 없다 판단하고 렌더링을 하지 않고 있음

 

[해결]

Mesh Renderer의 Update When Offscreen 옵션을 true(체크)로 변경

 

 

[참조] https://docs.unity3d.com/kr/2018.4/Manual/class-SkinnedMeshRenderer.html

 

스킨드 메시 렌더러 - Unity 매뉴얼

Unity는 메시의 모양이 미리 정의된 애니메이션 시퀀스에 따라 변형되는 Bone 애니메이션의 렌더링을 위해 Skinned Mesh Renderer 컴포넌트를 사용합니다. 캐릭터 뿐만 아니라 (조인트가 힌지처럼 기능

docs.unity3d.com

오프스크린일 때 업데이트(Update When Offscreen)

기본적으로 어떤 카메라에도 보이지 않는 스킨드 메시는 업데이트 되지 않습니다. 메시가 스크린에 다시 나타날 때까지 스키닝은 업데이트 되지 않습니다. 이는 시스템을 절약하기 위해서입니다.

오브젝트의 가시성은 메시의 Bounds 에서 결정됩니다(전체 바운딩 영역은 모든 활성화된 카메라의 뷰 밖에 있어야 합니다). 하지만 애니메이션 메시의 트루 바운딩 영역은 애니메이션이 재생되면서 변경될 수 있습니다(예를 들어 캐릭터가 공중으로 손을 들어 올리면 영역은 커집니다). Unity는 최대 바운딩 영역을 계산할 때 첨부된 모든 애니메이션을 고려하지만 일어날 만한 모든 경우를 예측하기 위해 바운드를 계산할 수 없는 경우도 존재합니다.

다음의 각 예제 상황은 뼈대나 버텍스를 미리 계산된 바운딩 영역 밖으로 밀어낼 때 문제가 됩니다.

  • 런타임에 애니메이션이 추가된 경우
  • 추가 애니메이션
  • 스크립트에서 뼈대의 포지션을 순서대로 바꿀 때
  • 버텍스를 미리 계산된 바운드 바깥으로 밀어내는 버텍스 셰이더를 사용할 때
  • 래그돌을 사용하는 경우

이런 문제에는 두 가지 해결책이 있습니다.

  1. 바운드를 수정해 메시의 잠재적 바운딩 영역을 일치시키기
  2. Update When Offscreen 을 활성화해 스킨드 메시를 항상 스킨 및 렌더링합니다.

일반적으로 퍼포먼스가 더 나은 첫 번째 옵션을 사용해야 합니다. 하지만 퍼포먼스가 주요 관심사가 아니거나 (래그돌을 사용할 때처럼)바운딩 영역의 크기를 예측할 수 없는 경우에 두 번째 옵션을 추천합니다.

스킨드 메시가 래그돌과 더 잘 작동하기 위해 Unity는 임포트할 때 스킨드 메시 렌더러를 루트 뼈대에 자동으로 리맵합니다. 하지만 이는 모델 파일에 스킨드 메시 렌더러가 하나일 때만 해당됩니다. 이는 스킨드 메시 렌더러 전체를 루트 뼈대이나 자식에 첨부하지 못하고 래그돌을 사용하면 이 최적화를 해제해야 함을 뜻합니다.

반응형
Posted by blueasa
, |