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

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
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
03-29 07:22

UnityでiOSとAndrodのランタイムパーミッションの確認と要求を行う方法

 

Unityでアプリのカメラ権限の確認&要求ってどうやるの?

これまでのUnityでのアプリ開発では、iOS/Android端末の機能の権限のチェックやリクエストをするために、ネイティブプラグインを利用する必要がありました。
最近になってやっと、ランタイムパーミッション関係のAPIが追加されたようなので、自分なりに使い方を調べてみました。


[iOS] Application.RequestUserAuthorizationクラス

https://docs.unity3d.com/ja/2018.2/ScriptReference/Application.RequestUserAuthorization.html
Unity2018.1以降で利用可能
iOSでウェブカメラまたはマイクを使用するための承認をリクエストします。
(カメラとマイクの権限のみチェックとリクエストが可能)

[Android] Android.Permissionクラス

https://docs.unity3d.com/2018.3/Documentation/ScriptReference/Android.Permission.RequestUserPermission.html
https://docs.unity3d.com/ja/current/Manual/android-RequestingPermissions.html
Unity2018.3以降で利用可能
Androidでユーザーに、デバイスリソースまたは承認が必要な情報へのアクセスを許可するよう要求します。
(クラスで定義されていない権限でも文字列で指定してチェックとリクエストが可能)


それぞれのプラットフォームに対応している新しく追加されたAPIを使用することで、簡易的な処理ならばネイティブプラグインを使用しないで目的を達成できそうです。
今回はカメラとマイクの権限の確認と要求をセットで行う例の作成を試みました。
そして、何回も試行錯誤した結果、導きだしたコードがこちら。

ランタイムパーミッション要求の例

using UnityEngine;
using System.Collections;
using System;

#if UNITY_ANDROID && UNITY_2018_3_OR_NEWER
using UnityEngine.Android;
#endif

namespace PermissionAuthorizationTest
{
    // iOS/Androidプラットフォームで動作するランタイムパーミッション要求のサンプル
    // 参考URL: https://forum.unity.com/threads/requestuserauthorization-as-a-coroutine-bugged.380666/
    public class PermissionAuthorizationExample : MonoBehaviour
    {
        IEnumerator Start ()
        {
            #if UNITY_IOS && UNITY_2018_1_OR_NEWER

            // iOS
            //
            // カメラパーミッションが許可されているか調べる
            if (!Application.HasUserAuthorization (UserAuthorization.WebCam)) {
                // 権限が無いので、カメラパーミッションのリクエストをする
                yield return RequestUserAuthorization (UserAuthorization.WebCam);
            }
            // マイクパーミッションが許可されているか調べる
            if (!Application.HasUserAuthorization (UserAuthorization.Microphone)) {
                // 権限が無いので、マイクパーミッションのリクエストをする
                yield return RequestUserAuthorization (UserAuthorization.Microphone);
            }
            // リクエストの結果、アプリ機能に必要なパーミッションが全て許可されたか調べる
            if (Application.HasUserAuthorization (UserAuthorization.WebCam) && Application.HasUserAuthorization (UserAuthorization.Microphone)) {
                // 権限が許可されたので、権限が必要なAPIを使用する処理へ進む(iOSでは権限拒否された状態でAPIを使用しようとするとアプリが落ちる)
                findWebCams ();
                findMicrophones ();
            } else {
                // 権限が許可されなかったので、ユーザーに対して権限の使用用途の説明を表示して自分でOSのアプリ設定画面で権限許可を行うようにアナウンスする必要がある。
                // (iOSでは初回の権限リクエストが拒否された場合は、次回からはリクエスト自体が表示されなくなる)
            }       

            #elif UNITY_ANDROID && UNITY_2018_3_OR_NEWER

            // Android
            //
            // カメラパーミッションが許可されているか調べる
            if (!Permission.HasUserAuthorizedPermission (Permission.Camera)) {
                // 権限が無いので、カメラパーミッションのリクエストをする
                yield return RequestUserPermission (Permission.Camera);
            }
            // マイクパーミッションが許可されているか調べる
            if (!Permission.HasUserAuthorizedPermission (Permission.Microphone)) {
                // 権限が無いので、マイクパーミッションのリクエストをする
                yield return RequestUserPermission (Permission.Microphone);
            }
            // リクエストの結果、アプリ機能に必要なパーミッションが全て許可されたか調べる
            if (Permission.HasUserAuthorizedPermission (Permission.Camera) && Permission.HasUserAuthorizedPermission (Permission.Microphone)) {
                // 権限が許可されたので、権限が必要なAPIを使用する処理へ進む
                findWebCams ();
                findMicrophones ();
            } else {
                // 権限が許可されなかったので、ユーザーに対して権限の使用用途の説明を表示してから再度のリクエストを行う。
                // もしも拒否時に「今後表示しない」がチェックされた場合は、次回からリクエスト自体が表示されなくなる、
                // そのためユーザーには自分でOSのアプリ設定画面で権限許可を行うようにアナウンスする必要がある。
                // (Permissionクラスにはそれらの違いを調べる方法は用意されていない)
            }

            #endif

            yield break;
        }

#if (UNITY_IOS && UNITY_2018_1_OR_NEWER) || (UNITY_ANDROID && UNITY_2018_3_OR_NEWER)
        bool isRequesting;

        // OSの権限要求ダイアログを閉じたあとに、アプリフォーカスが復帰するのを待ってから権限の有無を確認する必要がある
        IEnumerator OnApplicationFocus(bool hasFocus)
        {
            // iOSプラットフォームでは1フレーム待つ処理がないと意図通りに動かない。
            yield return null;

            if (isRequesting && hasFocus)
            {
                isRequesting = false;
            }
        }

        #if UNITY_IOS
        IEnumerator RequestUserAuthorization(UserAuthorization mode)
        {
            isRequesting = true;
            yield return Application.RequestUserAuthorization(mode);
            // iOSではすでに権限拒否状態だとダイアログが表示されず、フォーカスイベントが発生しない。
            // その状態を判別する方法が見つからないので、タイムアウト処理をする。

            // アプリフォーカスが戻るまで待機する
            float timeElapsed = 0;
            while (isRequesting)
            {
                if (timeElapsed > 0.5f){
                    isRequesting = false;
                    yield break;
                }
                timeElapsed += Time.deltaTime;

                yield return null;
            }
            yield break;
        }
        #elif UNITY_ANDROID
        IEnumerator RequestUserPermission(string permission)
        {
            isRequesting = true;
            Permission.RequestUserPermission(permission);
            // Androidでは「今後表示しない」をチェックされた状態だとダイアログは表示されないが、フォーカスイベントは通常通り発生する模様。
            // したがってタイムアウト処理は本来必要ないが、万が一の保険のために一応やっとく。

            // アプリフォーカスが戻るまで待機する
            float timeElapsed = 0;
            while (isRequesting)
            {
                if (timeElapsed > 0.5f){
                    isRequesting = false;
                    yield break;
                }
                timeElapsed += Time.deltaTime;

                yield return null;
            }
            yield break;
        }
        #endif
#endif

        void findWebCams ()
        {
            foreach (var device in WebCamTexture.devices) {
                Debug.Log ("Name: " + device.name);
            }
        }

        void findMicrophones ()
        {
            foreach (var device in Microphone.devices) {
                Debug.Log ("Name: " + device);
            }
        }
    }
}

 

読みにくくてすみません、コードの意図は必要以上に詳細なコメントを読んで理解してください。
iOS/Android実機でコードを試した結果、とりあえず期待通りに動作していることを確認しました。

OnApplicationFocus()を使用してアプリフォーカスの復帰を待機する処理は、
RequestUserAuthorization as a coroutine - bugged?
のスレッドのやりとりをヒントにしています。
このためコードがかなり複雑化してしまいました。

とにかく、権限が必要なAPIを利用する前に、あらかじめこのような処理を挟んでおくこで、アプリがクラッシュするなどの事態を避けることが出来るようになりました。

APIが追加される前の古いUnityバージョンではどうする?

Androidでは以下の記事の方法で可能です。ネイティブプラグインが必要無いので気軽に導入できる方法です。
UnityでAndroidのランタイムパーミッションに対応する
iOSでもAndroidでもAssetプラグインを使えば同様の事が実現可能です。たぶん無料のものも存在するはず。

最新のUnityのAPIでも権限の処理には不十分な点も

UnityのAPIは必要最小限の簡易的なものしか用意されていません。
ネイティブアプリと同等の権限の処理をしたい場合は、やはりネイティブプラグインの利用を検討する必要があるでしょう。

参考リンク

UnityにおけるAndroidアプリのパーミッション付与について

 

 

[출처] qiita.com/utibenkei/items/65b56c13f43ce5809561

 

UnityでiOSとAndrodのランタイムパーミッションの確認と要求を行う方法 - Qiita

Unityでアプリのカメラ権限の確認&要求ってどうやるの? これまでのUnityでのアプリ開発では、iOS/Android端末の機能の権限のチェックやリクエストをするために、ネイティブプラグインを利用

qiita.com

 

반응형
Posted by blueasa
, |

[링크] perafan.blog.me/30113207479

 

[본문스크랩]폰트 합치기

카페 > 스마트폰카페[갤럭시S/아이폰.. | 린군 http://cafe.naver.com/bjphone/528766 안녕하세요 린군...

blog.naver.com

 

반응형
Posted by blueasa
, |

[설명 링크] boogong.tistory.com/42

 

폰트 관리 프로그램 넥서스 폰트[설치방법, 그룹 추가, 폴더추가, 글꼴 관리, 미리 보기]

무료 폰트 관리 프로그램 넥서스 폰트 – nexusfont 블로거라면 꼭 필요한 필수 글꼴 관리 프로그램 넥서스 폰트입니다. 폰트가 많다 보면 관리 하기가 힘들죠. 어떤 폰트가 내 컴퓨터에 설치되어

boogong.tistory.com

 

 

[Nexus Font Download] www.xiles.net

 

Simple, easy and well designed applications by xiles

Fast and powerful file manager for Windows ver 5.3.3 (2012.12.08) NexusFile is a dual pane file manager. It looks simple but has powerful features. Archive, FTP, Advanced Rename and many more functions. You can customize its look with skin and list color s

www.xiles.net

 

반응형
Posted by blueasa
, |

[File] dp4 Font Viewer(64bit) v3.4

dp4FontViewer64_v3.4.zip
0.43MB

 

[Link] us.fontviewer.de/

 

dp4 Font Viewer - view OpenType ® and TrueType fonts

dp4 Font Viewer for Windows - a free and small tool to view fonts from any folder – OpenType ® (OTF), TrueType (TTF), use without installing.

us.fontviewer.de

 

 

반응형

'Utility' 카테고리의 다른 글

[링크] DB Browser for SQLite  (0) 2021.01.25
[링크] Nexus Font(폰트 관리/뷰어)  (0) 2020.10.21
[Link] 무료 온라인 QRCode 생성 사이트  (0) 2020.09.09
[링크] VPULSE BU-4096 (동글)  (0) 2020.05.27
[링크] 알마인드 Lite 1.72  (0) 2020.03.24
Posted by blueasa
, |

크롬 엔코딩 자동감지 기능 삭제, 확장 프로그램을 이용한 인코딩 변경 


 

안녕하세요. 고코더 입니다. 

 

개발을 하던 중 크롬에서 아무리 찾아봐도

인코딩 강제 변경 기능이 없습니다. 

 

 

 

▼익스플로러에서는 마우스 오른쪽 버튼을 누르면 쉽게 인코딩을 바꿀 수 있는데요.

 

이상하게 생각이 들어 구글 포럼에서 알아본 결과

55버전 이후부터 "자동 인코딩 감지" 기능으로 인코딩 지정 메뉴를 삭제 하였다고 합니다.

 

▼ 해당 페이지에서 자세히 확인 가능합니다.

https://productforums.google.com/forum/#!topic/chrome/-Ul20dPvbbo

 

하지만 한글은 고급 언어라 쉽게 감지가 안되는지 여전히

잘못 감지해 외계어로 보입니다. 

메타 태그나 페이지 인코딩을 우선순위로 인코딩을 지정하는 듯 합니다

->

[IT_팁/ASP] - 메모장으로 파일 인코딩 변경하기

[IT_팁/ASP] - 에디터플러스 에서 인코딩 변경하

결국 메뉴에서 사라진 인코딩을 

확장 프로그램을 통해 변경 해야 겠습니다.

 

▼아래 URL에 접근해서 "Set Character Encoding" 을 설치 해보겠습니다.

https://chrome.google.com/webstore/detail/set-character-encoding/bpojelgakakmcfmjfilgdlmhefphglae?hl=ko

 

▼추가 버튼으로 설치를 진행 합니다.

 

▼로컬에서 php파일을 만들어서 한글을 아파치에 그대로 크롬에서 실행하니

외계어로 표출 됩니다. (자동 감지라면서요ㅠ)

 

▼마우스 오른쪽 버튼을 눌러 설치한 확장 프로그램에서 인코딩을 utf-8로 변경 해보았습니다.

 

▼역시 제대로 표출 됩니다.

 

 

 

특히 개발시에는 필요한 지정이기에

개발자라면 설치 해놓고 사용 하시면 좋을거 같습니다.

 


크롬 개발자를 위한 컨텐츠


 

크롬 - 캐쉬 지우면서 새로고침 하기 / Clear Cache

크롬 - 사이트 로딩속도 체크 하기 / 개발자도구

console.log - 개발자도구 콘솔 창에 안보이게 하기

크롬 - 해외 무료 VPN / Browsec VPN

크롬 - 개발자 도구 다크테마(Dark theme)로 변경

쿠키 - 크롬에서 Cookie 변조(삭제,수정,변경) 하기

 


마무리


우리나라도 영어권 국가였으면..



출처: https://gocoder.tistory.com/215 [고코더 IT Express]

 

크롬 - 인코딩 강제 설정 / 글자 깨짐 수정

크롬 엔코딩 자동감지 기능 삭제, 확장 프로그램을 이용한 인코딩 변경 안녕하세요. 고코더 입니다. 개발을 하던 중 크롬에서 아무리 찾아봐도 인코딩 강제 변경 기능이 없습니다. ▼익스플로��

gocoder.tistory.com

 

반응형
Posted by blueasa
, |

원문 : Unity Application.persistentDataPath のパスは Android のバージョンと Write Access によって異なる。

Unity Application.persistentDataPath의 경로는 Android의 버전과 Write Access에 따라 달라짐

Android에서 Application.persistentDataPath가 돌려주는 값이 Write Access에 따라 달라지기에 조사해봤습니다.
Unity 5.3.6에서 돌려주는 경로에 사양변경이 있었으므로, Unity 5.3.6 이전 버전에서 작성한 애플리케이션을 Unity 5.3.6 이후로 버전업할 때 주의를 기울이지 않으면 데이터가 사라질 위험이 있습니다.
갖고 있는 Android기기와 Unity 4.7.2f1, 5.3.6f1에서 검증했습니다.

Application.persistentDataPath

지속되는 데이터 디렉토리 경로.
세이브 데이터 등 유저 데이터를 저장하는 장소.
https://docs.unity3d.com/kr/current/ScriptReference/Application-persistentDataPath.html

Player Settings / Write Access

Internal Only로 지정해도 Application.persistentDataPath이 개발환경과 실제환경에서 돌려주는 값이 다를 수 있으므로 주의가 필요합니다!
외부 저장소라면 특별히 권한을 요구하지 않고 읽어들일 수 있으므로 디버그하기 쉽기 때문일지도?

External (SDCard)로 설정하면, SD 카드같은 외부 저장소에 대한 쓰기 접근을 가능하게 합니다. 개발 빌드(Development Build)에서는 자동적으로 켜집니다. https://docs.unity3d.com/kr/current/Manual/class-PlayerSettingsAndroid.html

External Storage

외부 저장소라고 불리는 영역이지만 SD 카드가 아니라 빼낼 수 없게 내장된 저장소를 참조하는 기기도 있음.
Android 4.4 이후에는 권한을 요구하지 않고 외부 저장소에 읽고 쓰기가 가능.

Windows PC를 예로 들면
오래된 Android 기기
C드라이브: 내장 드라이브 (Android 내부 저장소)
D드라이브: USB로 접속된 외장 하드디스크 (Android 외부 저장소)
최신 Android 기기
C드라이브: 내장 드라이브 파티션 0 (Android 내부 저장소)
D드라이브: 내장 드라이브 파티션 1 (Android 외부 저장소)
E드라이브: USB로 접속된 외장 하드디스크 (Android 외부 저장소)

모든 Android 호환 기기는 파일을 저장하는 데 사용할 수 있는 공유된 "외부 저장소"를 지원합니다. 해당 저장소는 제거할 수 있는 저장소 미디어(예: SD 카드) 또는 (제거할 수 없는) 내부 저장소일 수 있습니다.
https://developer.android.com/guide/topics/data/data-storage.html#filesExternal

Android 4.4 이상에서 앱 전용 디렉터리 파일 읽기 또는 쓰기는 READ_EXTERNAL_STORAGE 또는 WRITE_EXTERNAL_STORAGE 권한이 필요하지 않습니다.
https://developer.android.com/guide/topics/data/data-storage.html#AccessingExtFiles

일부 기기는 이동식 저장 장치 없이도 영구 저장소 공간을 "내부" 그리고 "외부" 파티션으로 나누어 항상 두 개의 저장소 공간을 제공하며, API의 동작은 외부 저장소의 이동식 유무에 상관없이 일관적입니다.
https://developer.android.com/training/basics/data-storage/files.html#InternalVsExternalStorage

Unity 5.3.6에서의 사양변경

Android: Application.temporaryCachePath and Application.persistentDataPath always return external paths starting KITKAT. (789870) https://unity3d.com/kr/unity/whats-new/unity-5.3.6

KITKAT은 Android 4.4의 코드네임. Android 4.4 이후에는 Write Access의 값에 관계없이 외부 저장소의 경로를 돌려주도록 사양변경. Android 4.4 이후 권한을 요구하지 않고 읽고 쓰기가 가능하게 되었기 때문일 것.

Player Settings / Write Access 별 Application.persistentDataPath의 값

Write Access: Internal Only

Unity 4.7.2

AndroidPath실체

4.1.2 (200SH) /data/data/{package name}/files/ 내부 저장소
4.2.2 (SO-02F) /data/data/{package name}/files/ 내부 저장소
5.0.2 (HTV31) /data/data/{package name}/files/ 내부 저장소
6.0.1 (SCV31) /data/user/0/{package name}/files/ -> /data/data/{package name}/files/ 내부 저장소

Unity 5.3.6

AndroidPath실체

4.1.2 (200SH) /data/data/{package name}/files/ 외부 저장소
4.2.2 (SO-02F) /data/data/{package name}/files/ 외부 저장소
5.0.2 (HTV31) /storage/emulated/0/Android/data/{package name}/files/ 외부 저장소
6.0.1 (SCV31) /storage/emulated/0/Android/data/{package name}/files/ 외부 저장소

Write Access: External (SDCard)

Unity 4.7.2

AndroidPath실체

4.1.2 (200SH) /storage/sdcard0/Android/data/{package name}/files/ SD 카드
4.2.2 (SO-02F) /storage/emulated/0/Android/data/{package name}/files/ 외부 저장소
5.0.2 (HTV31) /storage/emulated/0/Android/data/{package name}/files/ 외부 저장소
6.0.1 (SCV31) (Permissions Storage: ALLOW) /storage/emulated/0/Android/data/{package name}/files/ 외부 저장소
6.0.1 (SCV31) (Permissions Storage: DENY) /data/user/0/{package name}/files/ -> /data/data/{package name}/files/ 내부 저장소

Unity 5.3.6

AndroidPath실체

4.1.2 (200SH) /storage/sdcard0/Android/data/{package name}/files/ SD 카드
4.2.2 (SO-02F) /storage/emulated/0/Android/data/{package name}/files/ 외부 저장소
5.0.2 (HTV31) /storage/emulated/0/Android/data/{package name}/files/ 외부 저장소
6.0.1 (SCV31) (Permissions Storage: ALLOW) /storage/emulated/0/Android/data/{package name}/files/ 외부 저장소
6.0.1 (SCV31) (Permissions Storage: DENY) /storage/emulated/0/Android/data/{package name}/files/ 외부 저장소

결과

Write Access: External (SDCard)로 지정하면 androidmanifest.xml에 외부 저장소에 읽고 쓰기 권한 요구가 추가됩니다.
WRITE_EXTERNAL_STORAGE 권한으로 읽고 쓰기도 가능.

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

WRITE_EXTERNAL_STORAGE를 추가한 경우, Android 6 이후에는 Permissions Storage의 물음에서 ALLOW를 선택할 때까지는 기동할 때마다 물어봄.
ALLOW를 선택한 후에도 Application의 설정에서 Permissions Storage 허가의 변경은 가능.
4.1.2 (200SH): Write Access: External (SDCard) 만이 SD 카드의 경로를 돌려줌.
SD 카드를 뽑았을 경우에는 Internal Only와 같은 경로를 돌려줌.
그 외에는 내부 저장소를 참조.
Unity 4.7.2 Android 6.0.1는 Permissions Storage의 허가 유무로 돌려주는 경로가 달라짐.
Unity 5.3.6 Android 4.4 이후는 Permissions Storage의 허가 유무와 상관없이 돌려주는 값이 같음.

Unity 4.7.2에서 작성한 애플리케이션에서 Application.persistentDataPath에 저장한 데이터를 Unity 5.3.6에서 작성한 애플리케이션에서 덮어씌웠을 경우 읽어들일 수 있을까?

internal-storage: /data/data/{package name}/files/
external-storage: /storage/emulated/0/Android/data/{package name}/files/

Android 4.1.2 (200SH)

Unity 4.7.2 Write AccessUnity 5.3.6 Write Access읽기 가능?거동

Internal Only Internal Only
Internal Only External (SDCard)
External (SDCard) Internal Only UnauthorizedAccessException: Access to the path "/storage/sdcard0/Android/data/{package name}/files/{file name}" is denied. external-storage를 internal-storage에 복사하려고 해서 실패?
External (SDCard) External (SDCard)

Android 4.2.2 (SO-02F)

Unity 4.7.2 Write AccessUnity 5.3.6 Write Access읽기 가능?거동

Internal Only Internal Only
Internal Only External (SDCard)
External (SDCard) Internal Only UnauthorizedAccessException: Access to the path "/storage/sdcard0/Android/data/{package name}/files/{file name}" is denied. external-storage를 internal-storage에 복사하려고 해서 실패?
External (SDCard) External (SDCard)

Android 5.0.2 (HTV31)

Unity 4.7.2 Write AccessUnity 5.3.6 Write Access읽기 가능?거동

Internal Only Internal Only
Internal Only External (SDCard)
External (SDCard) Internal Only UnauthorizedAccessException: Access to the path "/{file name}" is denied. external-storage를 internal-storage에 복사하려고 해서 실패?
External (SDCard) External (SDCard)

Android 6.0.1 (SCV31)

Unity 4.7.2 Write AccessUnity 5.3.6 Write Access읽기 가능?거동

Internal Only Internal Only internal-storage를 external-storage에 복사
Internal Only External (Permissions Storage: ALLOW)
Internal Only External (Permissions Storage: DENY) internal-storage를 external-storage에 복사
External (Permissions Storage: ALLOW) Internal Only 같은 경로
External (Permissions Storage: ALLOW) External (Permissions Storage: ALLOW) 같은 경로
External (Permissions Storage: ALLOW) External (Permissions Storage: DENY) 같은 경로
External (Permissions Storage: DENY) Internal Only internal-storage를 external-storage에 복사
External (Permissions Storage: DENY) External (Permissions Storage: ALLOW)
External (Permissions Storage: DENY) External (Permissions Storage: DENY) internal-storage를 external-storage에 복사

결과

Internal Only, External (Permissions Storage: DENY)일 때에는 internal-storage를 external-storage에 복사한 후에 읽어들이도록 되어 있음.
external-storage로 변경해도 internal-storage는 복사 시점 그대로 변경은 되지 않음.

정리

Internal Only -> External (SDCard)로의 변경은 데이터를 이어받지 못하는 경우가 있음. 그 경우, 수동으로 /data/data/{package name}/files/ 를 복사하는 등의 대응이 필요.
External (SDCard) -> Internal Only로의 변경은 오래된 Android 기기기에서 정상으로 처리되지 않을 가능성이 있음.
Android 6 이후에는 Unity 4.7.2의 Write Access가 어느쪽이든 Unity 5.3.6의 Write Access: Internal Only로 해두면 데이터를 이어받아 읽고 쓰기가 가능.

 

 

[출처] gist.github.com/overworks/541fcb519bc23cd14cf622c2baa28d3b

 

유니티와 안드로이드 버전에 따른 Application.persistentDataPath의 경로 정리

유니티와 안드로이드 버전에 따른 Application.persistentDataPath의 경로 정리 - Unity-Android-persitentDataPath.md

gist.github.com

 

반응형
Posted by blueasa
, |

[패키지 다운로드]

Colorblind Effect.unitypackage
0.91MB

 

[에셋] assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/colorblind-effect-76360

 

Colorblind Effect | 카메라 효과 | Unity Asset Store

Add depth to your project with Colorblind Effect asset from Project Wilberforce. Find this & more 시각 효과 options on the Unity Asset Store.

assetstore.unity.com

 

Colorblind Effect


View on Asset Store User Manual
Colorblind Effect (CBE) is a Fullscreen Camera Effect for Unity 5

Up to 8% of men (and about 0.5% of women) are affected by some type of color vision deficiency. Use this plugin to help you design better user experience and see how is your game perceived by colorblind people.


Screenshots made with Painterly Nature package.

Features

  • Three most common types of colorblindness
  • Simple setup and control
  • Compatible with all Unity rendering paths (Forward, Deferred and Legacy) and anti-aliasing
  • No perceptible performance hit
  • Works with GUI components (with Canvas render mode set to Screen Space - Camera)
  • Plugin is not tested on mobile devices.

Changelog
1.0

  • Initial release
 
반응형
Posted by blueasa
, |

Unity2018에서 Unity2019로 올려보면서 나오는 에러 정리

 

그렇게 큰 이슈는 없는 듯 하고, GUIText와 GUITexture가 obsolete 되면서 나온 이슈 뿐인 것 같다.

 

[Error:1] error CS0619: 'GUIText' is obsolete: 'GUIText has been removed. Use UI.Text instead.'

  -> GUIText -> UnityEngine.UI.Text 로 변경

 

[Error:2-1] error CS0619: 'GUITexture' is obsolete: 'GUITexture has been removed. Use UI.Image instead.'

  -> GUITexture -> UnityEngine.UI.Image 로 변경

 

[Error:2-2] error CS1061: 'Image' does not contain a definition for 'texture' and no accessible extension method 'texture' accepting a first argument of type 'Image' could be found (are you missing a using directive or an assembly reference?)

  -> Texture2D를 Sprite로 변환해서 처리

 

public void CameraFadeAdd(Texture2D texture)
{
  ....
  //Create Sprite from the Texture2D
  Sprite tempSprite = Sprite.Create(texture, new Rect(0.0f, 0.0f, texture.width, texture.height), new Vector2(0.5f, 0.5f), 100.0f);
  cameraFade.GetComponent().sprite = tempSprite;
  ....
}

[Error:2-2 참조] stackoverflow.com/questions/53491613/guitexture-is-deprecated-so-what-should-i-use-instead-of-it

 

[Error:3] 

[해당 씬에 접근 했을 때 Error]

- Component GUI Layer in Main Camera for Scene Assets/Scenes/InGame.unity is no longer available. It will be removed after you edit this GameObject and save the Scene. UnityEditor.SceneManagement.EditorSceneManager:OpenScene(String)

[빌드 할 때 Error]

- Component GUI Layer in Main Camera for Scene Assets/Scenes/InGame.unity is no longer available. It will be removed after you edit this GameObject and save the Scene. UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

- Component at index 2 could not be loaded when loading game object 'Main Camera'. Removing it!
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

  -> 해당 Scene으로 가서 Hierarchy에서 임의 수정 후 Save 하면 해결 됨.

 

[Error:3 참조]

Baroni 2020년 8월 12일 오전 6:43

All of them can be ignored. Just open the scenes once and save them.

[참조링크] www.rebound-games.com/forum/topic/2485/networkmanager-networkscenename-cannot-be-used-in-this-context-because-the-set-accessor-is-inaccessible/5

반응형
Posted by blueasa
, |